簡體   English   中英

在嵌套列表中查找匹配項

[英]Find matching items in nested list

我正在嘗試將項目列表與另一個不同維度的項目列表進行匹配,並在項目匹配時從第二個列表中打印元素。 例如:

stlist=['6', '3', '4', '2', '5', '1']
ndlist=[['Tom', '1'], ['Joh', '2'], ['Sam', '3'], ['Tommy','4'], ['Nanni', '5'], ['Ron', '6']]

我的輸出列表按照我的stlist的升序生成名稱。 即Tom,Joh,Sam,Tommy,Nanni,Ron但我希望outputlist與stlist的順序相同。

我的Python代碼是:

for sublist in ndlist:
    for element in stlist:
        if element in sublist[1]:
            print(sublist[0])

從上面的代碼顯示的輸出列表是:Tom,Joh,Sam,Tommy,Nanni,Ron而不是

outputlist = [Ron, Sam, Tommy, Joh, Nanni, Tom]

所以它實際上按升序排序我的1stlist並按順序打印第二個列表中的名稱。但是如果我的stlist按升序排列,則輸出列表就可以了。

任何人都可以告訴我為什么請,我應該如何修改代碼以獲得我想要的輸出列表。

嘗試重新排列for循環:

for element in stlist:
    for sublist in ndlist:
        if element in sublist[1]:
            print (sublist[0])

此外,if語句應該是這樣的: if element == sublist[1]:或者元素'1'可以在某個ndlist元素中找到,如下所示: ['foo', '10']

此外,對於大型列表,此解決方案不是最有效的。 為了提高效率,您可以嘗試對ndlist進行排序和執行二進制搜索以檢查元素是否存在。

您可以使用sorted和自定義排序鍵(Lambda函數)來執行此操作:

>>> [i[0] for i in sorted(ndlist, key = lambda x:stlist.index(x[1]))]
['Ron', 'Sam', 'Tommy', 'Joh', 'Nanni', 'Tom']

這行代碼使用ndlist中數字的位置作為排序鍵對stlist進行排序,然后列表stlist構建一個僅包含名稱的新列表。

除了嵌套循環或排序之外,您還可以使用一個線性運行ndlist創建映射,然后使用另一個線性運行stlist來構建結果列表:

mapping = dict((b, a) for a, b in ndlist)
result = [mapping[x] for x in stlist]
print(result)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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