可以将“范围”功能分配给列表吗?

时间:2011-06-11 19:07:38

标签: python

我正在研究Learn Python The Hard Way PDF。在第82页,我遇到了这个问题。

  • 你能完全避免第23行的for循环,只是将范围(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

除非我使用地图功能,否则这似乎是不可能的?我对么?

5 个答案:

答案 0 :(得分:10)

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

但是,for x in y不需要y作为列表,只需要可迭代(例如xrange(仅限2.x),range,{{1 },list,...)

答案 1 :(得分: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]表示法称为切片。 Start是从(包括,默认为0)开始的索引。 End是结束的索引(独占,默认为len(列表))。 By是如何从索引移动到下一个(默认为1)

答案 2 :(得分:2)

提示可能意味着您可以简单地使用

elements = range(6)

具有相同的结果。

答案 3 :(得分:0)

elements = range(0,6)

这是一个隐含的列表。

答案 4 :(得分:0)

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

More on extend