迭代元组列表并仅解压第一个元素

ora*_*nge 3 python list-comprehension iterable-unpacking

假设有以下列表: 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 个)。

Dev*_*ngh 5

您可以使用扩展的可迭代解包,在其中提取元组的前两个元素,并忽略其余元素。请注意,这仅适用于python3

{a:b for a, b, *c in foo}                                                                                                                                                             
Run Code Online (Sandbox Code Playgroud)


yat*_*atu 5

您可以使用扩展的可迭代解包,以这种方式保留可迭代的前两个值并忽略其余值:

{a: b for a, b, *_ in foo}
# {1: 2, 5: 6}
Run Code Online (Sandbox Code Playgroud)