繁体   English   中英

遍历python中的列表理解

[英]iterating over a list comprehension in python

为什么当我跑步时:

a = ['a','n','g']
b = [range(0,4)]

print [(x,y) for x in a for y in b]

返回:

[('a', [0, 1, 2, 3]), ('n', [0, 1, 2, 3]), ('g', [0, 1, 2, 3])]

但是当我运行这段代码时:

a = ['a','n','g']
b = [0,1,2,3,4]

print [(x,y) for x in a for y in b]

它返回:

[('a', 0), ('a', 1), ('a', 2), ('a', 3), ('a', 4), ('n', 0), ('n', 1), ('n', 2), ('n', 3), ('n', 4), ('g', 0), ('g', 1), ('g', 2), ('g', 3), ('g', 4)]

因此,您可能已经注意到,如果我使用范围函数,则会得到错误的输出,但是如果手动键入['a','n','g'] ,则会得到所需的输出

b = [range(0,4)]
and
b = [0,1,2,3,4]

两者显然是对的吗? 因此,为什么结果会有所不同(如果它们相同)

我基本上是在尝试构建一个程序,该程序的A的取值范围为999, B的取值范围为999,并且我认为对这1000位数字进行硬编码效率不高,我可能会觉得很疯狂

[range(0,4)][[0,1,2,3]] ,因此与[0,1,2,3,4]几乎不相同。

我认为您只需要range(0,5) (请注意,这周围没有方括号,并且要在结果中包含4 ,您需要对range()stop参数使用5 )。

针对您的特定问题:“我基本上是在尝试构建一个程序,该程序的A取反范围为999, B反范围为999”:

A = range(999, -1, -1)
B = range(1000)

假设您要使用[999, 998, ..., 1, 0][0, 1, ..., 998, 999]

两者显然是对的吗?

>>> [1, 2, 3, 4]
[1, 2, 3, 4]
>>> [range(0,4)]
[[0, 1, 2, 3]]

两者是不一样的。 您可能是说b = range(0,4)而没有多余的括号。

不,这两个不一样。 你可以想到

[range(0, 4)]

这样

[[0, 1, 2, 3]]

请注意,这是一个列表列表。

因此,当您对该列表进行列表理解时,它将简单地反复遍历单个元素[0, 1, 2, 3]

显然不,理论不相同,范围(0,4)为[0,1,2,3]

请注意,不同于:[range(0,4)]和[[0,1,2,3]]

检查任何python源。

链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM