【问题标题】:Python: how can I count the occurrences in a list of tuples?Python:如何计算元组列表中的出现次数?
【发布时间】:2016-03-31 13:48:53
【问题描述】:

我有一个listtuples,每个元组都有两个元素:一个整数和一个内部列表。元组列表有len=900,每个内部列表可以有len=2len=3len=4,具体取决于具体情况。

这是列表的摘录:

mylist=[(0, [1.0, 1.0]), (1, [1.0, 1.0, 1.0]), ..., (31, [1.0, 1.0, 1.0, 1.0]), ...].

这是一个特定情况,其中内部列表的每个元素都是1.0,但我想处理具有不同值的通用情况。

我的问题:

1) 如何计算内部列表中的元素总数?在可视化示例中,此数字为 2+3+4=9

2) 如何计算内部列表中每个值(或者更好的是每个 bin)的出现次数?

【问题讨论】:

  • 向我们展示您的代码 - 您已经尝试过。
  • 我没有尝试过任何事情,因为我不知道从哪里开始......抱歉。
  • 我看到您已经得到了答案,但 SO 并非旨在成为编码服务。您至少应该自己尝试解决方案,并在来这里之前展示您尝试过的方法。

标签: python list tuples find-occurrences


【解决方案1】:

您只需遍历列表,然后遍历内部列表,然后创建一个字典来分别计算每个值。 您还可以为每个内部列表增加一个变量来计算元素。

inner_list_count = 0
value_count = dict()
for key,innerlist in mylist:
    inner_list_count += len(innerlist)
    for value in innerlist:
        if value not in value_count:
            value_count(value) = 0
        value_count(value) += 1

【讨论】:

  • 也许您只是想要指导而不是代码?在那种情况下对不起我误解了
【解决方案2】:

元素数量:

sum(len(l) for _, l in mylist)

出现次数:

from collections import Counter
Counter(x for _, l in mylist for x in l)

分类出现次数:

from collections import Counter
binsize = 100
Counter(x - x % binsize for _, l in mylist for x in l)

【讨论】:

  • 如果我的价值观有更高的分布,那么我需要使用垃圾箱怎么办?我如何选择我的垃圾箱的宽度来告诉Counter 范围是什么?你明白我的意思了吗?
  • 两种情况都不需要创建中间列表对象:sum(len(l) for _, l in mylist)Counter(x for _, l in mylist for x in l)就够了
  • @massiou 感谢您的提示:)
【解决方案3】:

这里有一些东西可以帮助您入门。对于 #1,您可以通过列表理解获得元组每个部分的长度:

lens = [len(y) for x, y in mylist]

这将生成元组中每个子列表的长度数组,因此lens[0] 将等于 2,等等。

【讨论】:

    猜你喜欢
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多