用逗号列出推导式语法

问题描述

你能解释一下这段代码

[y for _,y in ((1,2),(3,4))]

输出[2,4]

我没有找到使用这种语法的文档,但它可以运行。

解决方法

[y for _,y in ((1,2),(3,4))] 是一个 List Comprehension

这相当于下面的for

In [2935]: l = []

In [2936]: for _,4)):
      ...:     l.append(y)
      ...: 
      ...: 

In [2937]: l
Out[2937]: [2,4]

还有 _ 是一个 throw-away 变量,这意味着您在迭代时使用的变量,但实际上并没有将它们用于任何其他目的。

,

如果您分解短语 ((1,4)),您最终会得到两个 tupletuple

因此迭代遍历外部 tuple,取 _ 中的第一项和 y 中的第二项,从中只取第二个变量 y ,并创建一个新的 list

这和这段代码一样,先更容易掌握:

my_set = ((1,4))
my_list = []
for _,y in myset:
    my_list.append(y)
,

您可以有效地将代码扩展为

t = ((1,4))
print([y for x,y in t])

在这里,用 x 替换 _ 返回原始单行

,
print([item for item in (("id",1),("name","Yao Yuan"))])
# Output: [('id',('name','Yao Yuan')]
print([(item[0],item[1]) for item in (("id",'Yao Yuan')]
print([(key,value) for key,value in (("id",'Yao Yuan')]
print([key for key,"Yao Yuan"))])
# Output: ['id','name']
print([value for key,"Yao Yuan"))])
# Output: [1,'Yao Yuan']
,

如果我将代码转换为

[y for             x,4))]

很容易理解 _ 等于 x

, 在第二个语句中

,

带逗号 x1,x2,....,xn = (y1,y2,yn) 的语法用于将长度为 n 的迭代解包为 n 个单独的变量。解包迭代时使用的 undescore 是说你不关心你解包的迭代的某个索引中的值。

所以基本上,你的例子是使用列表理解,你首先将可迭代 ((1,4)) 中的每个索引解包到变量 _,y(其中 _ 表示忽略索引 0),然后你理解所有 y 变量进入一个列表 = [2,4]

[y for _,4))]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...