簡體   English   中英

比較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.

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