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