簡體   English   中英

如何在Python中添加列表列表的特定元素?

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

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