根据另一个列表计算嵌套列表中的元素

时间:2017-03-07 11:13:21

标签: python list nested-lists

我正在尝试根据不同的单词列表计算嵌套列表中的单词出现次数。例如:

one = [['apple','pear','bear'],['apple','drawers','bear','grapes']]
word = ['pear','oranges','pineapple','scones','drawers']

我想计算列表单词中每个单词在名为one的每个嵌套列表中出现的次数。作为输出我想要:

new_one = [[0,1,0],[0,1,0,0]]

我尝试使用.count,但.count不使用列表中的元素,而是使用单个字符串或整数。我无法使用for循环来使用.count()索引单词元素。对于Counter来说也是如此,它似乎不适用于嵌套列表,也不适用于for循环。

我可以考虑使用字典但最终我希望new_one成为列表列表,因为我想稍后将new_one转换为矩阵,其中一行是矩阵的一行。

4 个答案:

答案 0 :(得分:0)

one = [['apple','pear','bear'],['apple','drawers','bear','grapes']]
word = ['pear','oranges','pineapple','scones','drawers']
output = []

# create a dict and populate with keys being unique words and values being its occurances
d = {}

for x in one:
    for y in x:
        d[y] = word.count(y)

# go through each word in sublist and find the count from the dict
for x in ne:
    output.append([d[y] for y in x])

这应该给你:

output = [[[0, 1, 0], [0, 1, 0, 0]]]

答案 1 :(得分:0)

这是一种可能的方法:

[[[0, 1, 0], [0, 0, 0, 0]],
 [[0, 0, 0], [0, 0, 0, 0]],
 [[0, 0, 0], [0, 0, 0, 0]],
 [[0, 0, 0], [0, 0, 0, 0]],
 [[0, 0, 0], [0, 1, 0, 0]]]

输出:

production

答案 2 :(得分:0)

最简单的方法是使用嵌套列表解析:

[[word.count(w) for w in l] for l in one]

这效率稍低,因为它每次都计算每个单词的出现次数(例如,它会两次执行word.count('apple')),但如果你的列表不长,那么它就会赢得是个问题。

答案 3 :(得分:0)

首先我们迭代出列表,即一个。对于每个列表,我们迭代元素,即苹果梨熊等。如果这匹配列表字,那么我们附加到临时列表new_one_temp。在每个外部迭代中,我们附加到new_one列表。

one=[['apple','pear','bear'],['apple','drawers','bear','grapes']]
word=['pear','oranges','pineapple','scones','drawers']

new_one=[]
for list_elem in one:
    new_one_temp=[]
    for word_text in list_elem:
        if word_text in word:
            new_one_temp.extend([1])
        else:
            new_one_temp.extend([0])
    new_one.append(new_one_temp)
print new_one

输出

new_one = [[0, 1, 0], [0, 1, 0, 0]]