[英]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 data
中data[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.