我试图计算嵌套列表中第一个元素的出现:
我的嵌套列表看起来像这样(这是一个被删减的列表,有几个条目,如:['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]]
如何正确执行此操作?
答案 0 :(得分:2)
根据我对您的问题的理解(可能是错误的),以下内容应为您提供所需的输出:
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
here