0

为什么当我运行时:

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)]

所以你可能已经注意到,如果我使用 range 函数,我会得到一个错误的输出,但是如果我手动输入['a','n','g']我会得到想要的输出

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

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

我基本上是在尝试构建一个程序,其中A在 999 范围内反转,B在 999 范围内,并且相信我对这 1000 位数字进行硬编码效率不高,我可能会被认为是疯了

4

4 回答 4

5

[range(0,4)]与 相同[[0,1,2,3]],因此与 非常不一样[0,1,2,3,4]

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

对于您的具体问题:“我基本上是在尝试构建一个A反转范围为 999 且B范围为 999 的程序”:

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

这假设您想要[999, 998, ..., 1, 0]和之类的范围[0, 1, ..., 998, 999]

于 2013-06-18T15:57:12.290 回答
4

两者显然是一样的吧?

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

两者不一样;您可能的意思是b = range(0,4)没有额外的括号。

于 2013-06-18T15:57:41.887 回答
3

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

[range(0, 4)]

像这样

[[0, 1, 2, 3]]

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

因此,当您对该列表进行列表推导时,它只会一遍又一遍地迭代单个元素[0, 1, 2, 3]

于 2013-06-18T15:57:08.563 回答
0

显然不,它们不一样,范围(0,4)是[0,1,2,3]

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

检查任何 python 源。

关联

于 2013-06-18T15:58:00.823 回答