在python中比较多个列表的有效方法

时间:2017-09-12 14:31:25

标签: python

我有5个带有单词对的长列表,如下例所示。请注意,这可能包括[['Salad', 'Fat']]等单词对列表和[['Bread', 'Oil'], ['Bread', ' Salt']]

等列表的单词对列表
list_1 = [ [['Salad', 'Fat']], [['Bread', 'Oil'], ['Bread', 'Salt']], [['Salt', 'Sugar'] ]
list_2 = [ [['Salad', 'Fat'], ['Salt', 'Sugar']], [['Protein', 'Soup']] ]
list_3 = [ [['Salad', ' Protein']], [['Bread', ' Oil']], [['Sugar', 'Salt'] ]
list_4 = [ [['Salad', ' Fat'], ['Salad', 'Chicken']] ]
list_5 = [ ['Sugar', 'Protein'], ['Sugar', 'Bread'] ]

现在我想计算单词对的频率。

例如,在上面的5个列表中,我应该得到如下输出,其中显示了单词对及其频率。

output_list = [{'['Salad', 'Fat']': 3}, {['Bread', 'Oil']: 2}, {['Salt', 'Sugar']: 2, 
{['Sugar','Salt']: 1} and so on]

在python中执行此操作的最有效方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以flatten所有列表。然后使用Counter计算单词频率。

bash final_transform.bash

注意:此展平技术仅适用于列表列表。有关其他展平技术,请参阅上面提供的链接。

编辑: 感谢AChampion transform_to_load.bash可以写成>>> import itertools >>> from collections import Counter >>> l = [[1,2,3],[3,4,1,5]] >>> counts = Counter(list(itertools.chain(*l))) >>> counts Counter({1: 2, 3: 2, 2: 1, 4: 1, 5: 1})

答案 1 :(得分:1)

鉴于您的嵌套列表不均匀,这会使代码变得难看,因此会修复输入列表。

collections.Counter()是针对此类内容而构建的,但list s不可清除,因此您需要将它们转换为tuple s(以及strip关闭虚假内容空格):

In []:
import itertools as it
from collections import Counter

list_1 = [ [['Salad', 'Fat']], [['Bread', 'Oil'], ['Bread', 'Salt']], [['Salt', 'Sugar'] ]]
list_2 = [ [['Salad', 'Fat'], ['Salt', 'Sugar']], [['Protein', 'Soup']] ]
list_3 = [ [['Salad', ' Protein']], [['Bread', ' Oil']], [['Sugar', 'Salt'] ]]
list_4 = [ [['Salad', ' Fat'], ['Salad', 'Chicken']] ]
list_5 = [ ['Sugar', 'Protein'], ['Sugar', 'Bread']] 

t = lambda x: tuple(map(str.strip, x))
c = Counter(map(t, it.chain.from_iterable(it.chain(list_1, list_2, list_3, list_4))))
c += Counter(map(t, list_5))
c

Out[]:
Counter({('Bread', 'Oil'): 2,
         ('Bread', 'Salt'): 1,
         ('Protein', 'Soup'): 1,
         ('Salad', 'Chicken'): 1,
         ('Salad', 'Fat'): 3,
         ('Salad', 'Protein'): 1,
         ('Salt', 'Sugar'): 2,
         ('Sugar', 'Bread'): 1,
         ('Sugar', 'Protein'): 1,
         ('Sugar', 'Salt'): 1})
相关问题