计算嵌套列表中的第一个元素

时间:2019-11-05 13:23:32

标签: python

我试图计算嵌套列表中第一个元素的出现:

我的嵌套列表看起来像这样(这是一个被删减的列表,有几个条目,如:['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]]

如何正确执行此操作?

1 个答案:

答案 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

的更多信息