[英]How do I add specific elements of a list of lists in Python?
因此,如果第一個和第二個值相等,我想在列表列表中添加元素的第三個值。 如果不是,我希望將不相等的值添加到我的總和列表中。
first=[[1,1,5],[2,3,7],[3,5,2],[4,4,6]]
second=[[1,1,3],[4,2,4],[2,3,2]]
sum=[]
for i in ((first)):
for j in ((second)):
if i[0]==j[0] and i[1]==j[1]:
sum.append([i[0],j[1],i[2]+j[2]])
print(sum)
所以這給了我[[1, 1, 8], [2, 3, 9]]
但我想[3,5,2],[4,4,6],[4,2,4]
在我的sum
也列出。 我該如何在pyhton中進行此操作?
一種解決方案是使用標准庫中的collections.defaultdict
。
這個想法是將字典鍵設置為前兩個元素的元組,然后將第三個元素遞增。 然后,通過字典理解來聚合鍵和值。
first = [[1,1,5],[2,3,7],[3,5,2],[4,4,6]]
second = [[1,1,3],[4,2,4],[2,3,2]]
from collections import defaultdict
from itertools import chain
d = defaultdict(int)
for i, j, k in chain(first, second):
d[(i, j)] += k
res = [[*k, v] for k, v in d.items()]
print(res)
[[1, 1, 8], [2, 3, 9], [3, 5, 2], [4, 4, 6], [4, 2, 4]]
這是不使用任何庫的等效解決方案,使用dict.setdefault
:
d = {}
for i, j, k in first+second:
d.setdefault((i, j), 0)
d[(i, j)] += k
res = [[*k, v] for k, v in d.items()]
我試圖在沒有字典或庫的情況下做到這一點:
first = [[1,1,5],[2,3,7],[3,5,2],[4,4,6]]
second = [[1,1,3],[4,2,4],[2,3,2]]
checked = []
sum = []
for n_i, i in enumerate(first):
for n_j, j in enumerate(second):
if i[0]==j[0] and i[1]==j[1]:
sum.append([i[0],j[1],i[2]+j[2]])
checked.append([n_i,n_j]) # Save the used index
# Delete used index
[first.pop(i[0]) and second.pop(i[1]) for i in reversed(checked)]
# Append non-used index
[sum.append(first.pop(0)) for x in range(0,len(first))]
[sum.append(second.pop(0)) for x in range(0,len(second))]
print(sum)
返回:
[[1, 1, 8], [2, 3, 9], [3, 5, 2], [4, 4, 6], [4, 2, 4]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.