为什么我跑的时候:
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个数字效率不高,我可能会被认为是疯了
答案 0 :(得分:5)
[range(0,4)]
与[[0,1,2,3]]
相同,因此与[0,1,2,3,4]
非常不同。
我认为您只需要range(0,5)
(请注意,此处没有方括号,并且要在结果中包含4
,您需要5
stop
} range()
}的参数。
并针对您的具体问题:“我基本上是在尝试构建一个程序,其中A
的范围为999,反之为B
,范围为999”:
A = range(999, -1, -1)
B = range(1000)
这假定您需要[999, 998, ..., 1, 0]
和[0, 1, ..., 998, 999]
等范围。
答案 1 :(得分:4)
两者显然是一样的吗?
>>> [1, 2, 3, 4]
[1, 2, 3, 4]
>>> [range(0,4)]
[[0, 1, 2, 3]]
两者不一样;你可能意味着b = range(0,4)
没有额外的括号。
答案 2 :(得分:3)
不,这两个不一样。你可以想到
[range(0, 4)]
这个
[[0, 1, 2, 3]]
请注意,它是一个列表清单。
因此,当您对此列表进行列表理解时,它将一遍又一遍地遍历单个元素[0, 1, 2, 3]
。
答案 3 :(得分:0)