我正在尝试计算嵌套列表中第一个元素的出现次数:
我的嵌套列表看起来像这样(这是一个截断的列表,有几个条目,如:['powerpc', 'powerpc', '4565975']
list = [...
['powerpc', 'powerpc', '4565975'],
['macs', 'mac', '4565975'],
['einsetzen', 'einsetz', '4565975'],
['thema', 'thema', '4565975']
...
]
这是一个截断的列表,例如有几个条目:['powerpc', 'powerpc', '4565975']。
所以我想计算在这种情况下“powerpc”、“mac”、“einsetzten”和“thema”的出现次数。另外我想根据最后的数字合并嵌套列表。到目前为止,我无法弄清楚如何合并它们。我仍在尝试正确计算列表中的元素。
所以我的预期结果是这样的:
nl = [['powerpc', 'powerpc', '4565975', 2],
['macs', 'mac', '4565975', 5],
['einsetzen', 'einsetz', '4565975', 4],
['thema', 'thema', '4565975', 3]
]
到目前为止,我尝试使用此代码计算每个嵌套列表中的第一个元素:
nl = [[x,l.count(x[0])] for l in list for x in set(l)]
但这会计算嵌套列表中的每个元素,而不仅仅是嵌套列表中的第一个元素。
这是此代码产生的输出:
nl = [['powerpc', 0],
['4565975', 0],
['mac', 0],
['macs', 0],
['4565975', 0],
['einsetz', 0],
['einsetzen', 0],
['4565975', 0],
['thema', 0]]
我怎样才能正确地做到这一点?
根据我对您的问题的理解,这可能是错误的,以下内容应该为您提供所需的输出:
from itertools import groupby
# From what I understand, your full list looks something like this
lst = [
['powerpc', 'powerpc', '4565975'],
['macs', 'mac', '4565975'],
['einsetzen', 'einsetz', '4565975'],
['thema', 'thema', '4565975'],
['powerpc', 'powerpc', '4565975'],
['macs', 'mac', '4565975'],
['einsetzen', 'einsetz', '4565975'],
['thema', 'thema', '4565975'],
['powerpc', 'powerpc', '4565975'],
['macs', 'mac', '4565975'],
['einsetzen', 'einsetz', '4565975'],
['thema', 'thema', '4565975']
]
sorted_lst = sorted(lst)
n1 = [l + [len(list(g))] for l, g in groupby(sorted_list)]
print(n1)
# [['einsetzen', 'einsetz', '4565975', 3], ['macs', 'mac', '4565975', 3],['powerpc', 'powerpc', '4565975', 3], ['thema', 'thema', '4565975', 3]]
如果没有看到您的实际列表,我无法保证输出,但是我的测试得出了我预期的结果。这种方法有两个组成部分。第一个组件是对列表进行排序。默认情况下,它会根据嵌套列表中的第一个条目对列表进行排序,因此无需传递排序键。现在sorted_lst
根据每个列表中的第一个条目按字母顺序组织您的所有列表项。下一步是使用itertools.groupby
将相似的项目组合在一起,并计算每个项目的数量。然后我们重建列表,将每个元素的计数附加到该元素的末尾。你可以在这里阅读更多itertools.groupby
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句