Python元组中嵌套元组的提取

3
假设您有以下元组的元组:
test = ((1, '2'), (3, '4'), ('5', '6'))

如果我想提取每个元组的第二个元素,我会这样做:

secondonly = tuple([x[-1] for x in test])

我还看到过:

secondonly = tuple([x for word, x in test]) <---- ** <--- 这是如何工作的?

有人能解释一下**这行代码是如何得到正确结果的吗?谢谢。


2
单词,x =(1,'2'),这是简单的赋值。 - Ashwini Chaudhary
也被称为元组/列表/序列解包 http://docs.python.org/release/1.5.1p1/tut/tuples.html。 - aisbaa
也许使用“_”来表示不需要的值的惯例可以提高可读性:secondonly = tuple([x for _, x in test]) - Nils Werner
此外,这里的方括号是不必要的。tuple(x for word, x in test)tuple([x for word, x in test]) 相比,效果相同甚至更好。 - user2555451
2个回答

3

test包含了长度为2的3个元组。for word, x in test(等价于for (word, x) in test)将每个元组的第一个元素解包成word,第二个元素解包成x。因此,[x for (word, x) in test]取出每个元组的第二个元素 (x) 并创建一个列表。


1

这与第一个示例中的操作类似 - "x for x in blah" 在for循环中构建了所有xs的列表。在本示例中,for循环包括将"test"的每个元素分配给"word, x",这会自动将元组解包到这两个变量中,因此意味着"word"和"x"分别取每个元组的第一个和第二个元素。这意味着"x"始终指向元组的第二个元素,因此循环按需要构建第二个元素的列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接