2011-06-11 26 views
0

我正在研究Learn Python The Hard Way PDF。在第82页,我遇到了这个问题。'范围'功能是否可以分配给列表?

  • 你能避免完全在第23行的for-loop,只是直接指定范围(0,6)到元素?

给予代码:

# we can also build lists, first start with an empty one 
elements = [] 

# then use the range function to do 0 to 20 counts 
for i in range(0, 6): 
    print "Adding %d to the list." % i # line 23 
    # append is a function that lists understand 
    elements.append(i) 

# now we can print them out too 
for i in elements: 
    print "Element was: %d" % i 

看来这是不可能的,除非我使用地图功能?我对么?

回答

10

在python 2.x中,range返回一个列表。在3.x中,它返回一个可迭代的范围对象。您始终可以使用list(range(...))获取列表。

然而,for x in y不需要y是一个列表,只是一个迭代(如xrange(2.X只),rangeliststr,...)

2

的提示很可能意味着建议,你可以简单地使用

elements = range(6) 

具有相同的结果。

0

elements = range(0,6)

这是一个隐式列表。

+0

谢谢(大家)。我觉得太困难了。 – 2011-06-11 19:20:44

+7

@Bas van der Zon - 这个答案只适用于Python 2.x,而不是3. – Omnifarious 2011-06-11 19:24:06

4

但你也可以做的相当复杂的任务也是如此。

elements = [0,1,2,3,4,5,6,7,8,9,10] 

elements[3:5] = range(10,12) # replace indexes 3 and 4 with 10 and 11. 

elements[3:7:2] = range(100,201,100) replace indexes 3 and 5 with 100 and 200 

elements[:] = range(4) # replace entire list with [0,1,2,3] 

[start,end,by]符号称为切片。开始是从(包括,默认为0)开始的索引。 End是要结束的索引(独占,默认是len(list))。由是如何从指数移动到下一个(默认为1)

+0

这些都不能在Python 3中工作。 – Omnifarious 2011-06-11 19:22:56

+0

真的吗?这很糟糕。是否有新的语法/功能来弥补损失? – Dunes 2011-06-11 20:19:15

+0

不是真的,除了第三条语句之外的所有内容都在Python 3中工作。仅仅第三条语句不起作用,因为200需要用201替换(或者只有一个元素在范围中)。 – 2011-06-11 21:32:30

0
elements = range(0,5) 
elements.extend(range(5, 10)) 
#elements = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

More on extend