![](/img/trans.png)
[英]How to compare elements in a list of lists and compare keys in a list of lists in Python?
[英]Compare elements in a list of lists in python and finding a match
我在Python中有一個列表列表,每個列表包含5個元素。 例如
lists = [['x1', 'y1', 'z1', '10', ''],
['x1', 'y1', 'z1', '', '5'],
['x2', 'y2', 'z2', '10', ''],
['x2', 'y2', 'z2', '10', ''],
['x1', 'y1', 'z1', '', '5'],
['x3', 'y3', 'z3', '', '40'],
['x2', 'y2', 'z2', '', '20']]
我想比較每個列表的前3個元素,如果有匹配項,那么對於匹配列表,我想添加每行的第4列並將其與匹配列表第5列的總和進行比較。 如果匹配列表集中第4列和第5列的總和匹配,則需要輸出行。
因此,在上面的示例中,輸出應為
output = [['x1', 'y1', 'z1', '10', '10'],
['x2', 'y2', 'z2', '20', '20']]
有人可以為此提供解決方案嗎?
謝謝
一線解決方案!
output = [l[:4] + [str(sum(int(j[4]) for j in lists if j[:3] == l[:3] and j[4]))] for l in (l for l in lists if l[3])]
output
為:
[['x1', 'y1', 'z1', '10', '10'], ['x2', 'y2', 'z2', '20', '20']]
我沒有嘗試解釋該行,而是將過程擴展為更大的for-loop
向下滾動以獲取有關其工作方式的正確解釋。
output = []
for l in (l for l in lists if l[3]):
sm = 0
for j in lists:
if j[:3] == l[:3] and j[4]:
sm += int(j[4])
sm = str(sm)
if sm == l[3]:
output.append(l[:4] + [sm])
怎么樣?
好吧,我們正在遍歷生成器l for l in lists if l[3]
。 本質上,我們只想開始遍歷實際上在第三個索引中具有值的列表,以便我們可以對其他具有相同前三個元素的列表進行匯總,並將其與l[3]
進行比較。
然后,將sum變量( sm
)聲明為0
,並將其他列表元素添加到該變量。
接下來,我們要開始遍歷lists
中可能具有相同的前三個元素的其他列表。
然后,我們檢查前三個元素是否相同( j[:3] == l[:3]
),還檢查第四個元素的總和是否確實有東西要累加(否則,當嘗試將空字符串轉換為int
)。 然后,如果通過了此測試,我們將j[4]
添加到sm
並繼續進入下一個列表。
接下來,將sum( sm
)轉換為字符串,因為這是末尾所需的數據類型,並保存將l[3]
轉換為整數。
最后,我們將此字符串與原始列表中的第四個元素進行比較-如果相同,則將原始列表以及總和(使用列表串聯)附加到output
列表中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.