簡體   English   中英

Python中兩個列表的求和

[英]Sum intersection of two lists in 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包含兩個值的data[i][4] for i in datadata[i][4] for i in data返回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的最后一個元素是包含ls[1] ls[2] data[3][4] ls[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 
]

這是我的方法:使用來自集合的計數器來跟蹤總和。 我們將每個子列表中的前兩項用作鍵,將最后一項用作值:

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]) )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM