簡體   English   中英

迭代元組列表並僅解壓第一個元素

[英]Iterate over list of tuples and unpack first elements only

假設有以下列表: foo = [(1, 2, 3, 4), (5, 6, 7, 8)]

有沒有辦法遍歷列表並僅解包內部元組的前兩個元素?

這是一個通常的模式: {a: b for a, b, _, _ in foo} ,但是如果foo被修改(程序更改)並且元組現在包含 5 個元素而不是 4 個(列表理解需要作相應修改)。 我真的很喜歡命名元素而不是調用{f[0]: f[1] for f in foo} ,所以理想情況下,會有某種“吸收所有未解壓的變量”,所以可以調用{a: b for a, b, absorb_rest in foo} 如果可能的話,元組中包含多少個元素並不重要(只要至少有 2 個)。

您可以使用擴展的可迭代解包,在其中提取元組的前兩個元素,並忽略其余元素。 請注意,這僅適用於python3

{a:b for a, b, *c in foo}                                                                                                                                                             

您可以使用擴展的可迭代解包,以這種方式保留可迭代的前兩個值並忽略其余值:

{a: b for a, b, *_ in foo}
# {1: 2, 5: 6}

嘗試這個 :

dict_ = {a:b for a,b, *_ in foo}

輸出

{1: 2, 5: 6}

如果foo稍后被程序更改為[(1, 2, 3, 4,9,0), (5, 6, 7, 8, 11, 16)]dict_仍然保持: {1: 2, 5: 6}

使用lambda

foo = [(1, 2, 3, 4), (5, 6, 7, 8)]
output = list(map(lambda x:{x[0]:x[1]}, foo))
print(output)

輸出

[{1: 2}, {5: 6}]

暫無
暫無

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

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