如何解决用逗号列出推导式语法
你能解释一下这段代码吗
[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))
,您最终会得到两个 tuple
的 tuple
。
因此迭代遍历外部 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))]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。