Python中两个列表的和

时间:2015-07-12 00:32:45

标签: python

我是Python的新手。如果我有一个'数据'像这样的变量:

data = [['water', 'chips', 'pie', 'fruit', 200], ['soda', 'nuts', 'cake', 'vegetables', 300], ['water', 'chips', 'cake', 'fruit', 40], ['soda', 'crackers', 'cake', 'vegetables', 80]]

我有一个这样的清单:

ls = [['water', 'chips'], ['soda', 'nuts']]

如何返回包含这两个值的data[i][4] for i in data之和并将其附加到列表中。

total = 0
for i in data:
    for x in ls
        if i contains x:
             ls[2] = total += total

# should return
ls = [['water', 'chips', 240], ['soda', 'nuts', 300]]

ls中的最后一个元素是包含data[3][4] ls[1]

ls[2]的总和

2 个答案:

答案 0 :(得分:1)

res = [
    e +  # filter list itself
    [
        sum( # sum all
            l[4]  # get fourth item if contains all
            for l in data  # take each element of data
            if all(i in l for i in e)  # check if contains all filter list
        )
    ]  # concat sum to list itself
    for e in ls  # take each element of filter list 
]

答案 1 :(得分:0)

这是我的方法:使用集合中的Counter来跟踪总和。我们使用每个子列表中的前两项作为键,最后一项作为值:

from collections import Counter

data = [
    ['water', 'chips', 'pie', 'fruit', 200],
    ['soda', 'nuts', 'cake', 'vegetables', 300],
    ['water', 'chips', 'cake', 'fruit', 40],
    ['soda', 'crackers', 'cake', 'vegetables', 80]]
ls = [['water', 'chips'], ['soda', 'nuts']]

counter = Counter()
for item in data:
    if item[:2] in ls:
        counter.update({tuple(item[:2]): item[-1]})

result = [list(k) + [v] for k, v in counter.iteritems()]
print result

由于Counter的行为类似于字典,而字典不将列表作为键,因此我们必须将前两个元素的列表转换为元组(因此tuple(item[:2]))。