【问题标题】:How do I sort data from a list and append the the number of occurrences in the list如何对列表中的数据进行排序并附加列表中出现的次数
【发布时间】:2016-10-02 22:40:25
【问题描述】:

我无法剖析这些数据。我想知道每个列表中有多少#1。找到该号码后,我想将其附加到另一个列表中以备后用。

我似乎得到了输入:

--> [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

当我真正想要时:

--> [2, 2, 2, 2, 0, 2, 2, 1, 11, 0]

这是代码:

d = []
count = 0

b = [[1,3,6,2,7,3,9,2,7,1,7], 
     [1,5,8,3,0,3,6,2,7,2,1],
     [1,5,2,6,8,6,2,5,1,8,9],
     [5,2,5,2,1,8,1,5,2,4,6],
     [5,7,2,7,3,7,3,7,3,9,2],
     [1,5,8,3,0,3,6,2,7,2,1],
     [5,2,5,2,1,8,1,5,2,4,6],
     [3,6,1,5,7,8,4,3,6,3,3],
     [1,1,1,1,1,1,1,1,1,1,1],
     [3,4,5,6,8,5,7,5,7,3,7]]

for i in b:
    for x in b:
        if x == 1:
            count =+ 1
    d.append(count)
    count = 0

print(d)

【问题讨论】:

  • 我假设=+ 是一个错字,而您的意思是+=。您可能需要编辑此问题的标题,因为它与排序没有太大关系。
  • 是一个错字@AChampion
  • 希望下面的答案能帮助您解决问题。

标签: arrays python-3.x sorting


【解决方案1】:

您在第二个 for 循环中迭代了错误的对象,我相信您的意思是:

for x in i:

这就是您收到0s 的原因

在标准的collections 模块中有一个Counter 类,所以你可以简化这个:

>>> from collections import Counter
>>> [Counter(i)[1] for i in b]
[2, 2, 2, 2, 0, 2, 2, 1, 11, 0]

您也可以在不使用 Counter 类的情况下更详细地执行此操作:

>>> [sum(1 for x in i if x == 1) for i in b]
[2, 2, 2, 2, 0, 2, 2, 1, 11, 0]

【讨论】:

  • [sum(x==1 for x in i) for i in b] 会更短,如果您不介意将布尔值自动视为整数。
  • @Chrono Kitsune 非常感谢。你是如何学会在这么少的代码中投入这么多东西的?它看起来像一个 lamda 函数,但我认为不是。还是谢谢
  • @HeketavNolroc 知识主要来自探索——允许什么以及如何使用语言和库来使内容尽可能简洁,同时仍然可读。令人惊讶的是,True+True+True == 3 是一个真实的陈述,这是避免在表达式末尾使用if x==1 的技巧。如果您了解列表推导就像是浓缩的 for 循环和生成器表达式(例如传递给 sum 函数的表达式),那么剩下的就非常简单了/跨度>
猜你喜欢
  • 2017-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-18
相关资源
最近更新 更多