1
#!/usr/bin/python


list2 = ['Bangalore','Cochin','Trivandrum','Auckland','Seoul','Los Angeles']

list2[5] = 'Hamilton'

list2.append('Sydney')
list2.append('San Jose')
list2.append('Amsterdam')

print "Cities = ",list2[0:(len(list2) - 1)]

print "Cities = ",list2[0:(len(list2))]

第一个打印语句不打印列表中的最后一个元素。第二个打印语句确实打印列表中的所有元素而没有超出范围的错误。从我理解的文档中,len() 只返回列表中的元素数.那为什么最后一个索引不是 len(list) - 1

4

2 回答 2

7

列表切片永远不会引发越界错误:

list2[0:1234567890]

是合法的

list2[-1:-1]

请注意,切片时,切片中不包含上限:

>>> list2[0:1]
['Bangalore']
>>> list2[0:0]
[]

所以切片list2[0:len(list2)]包含与没有切片完全相同的元素list2,但确实返回一个新列表。

其他一些评论:

  • 如果省略起始值,则默认为0,如果省略,则结束值默认为列表的长度。因此,list2[0:len(list2)]可以写成list2[:]

  • 负值从最后开始计算。list2[:len(list2)-1]可以写成list2[:-1]

于 2013-05-22T22:18:09.597 回答
3

因为上限不包括在内。这意味着如果您的列表有 1 个元素,则需要将 1 而不是 0 包含在切片中。list[0:0]实际上是一个空切片,如果上限是包容性的,就没有办法得到一个空切片。要获得仅包含第一个元素的切片,您需要list[0:1]改为。

(我使用只有 1 个元素的列表,因为它非常易于理解。显然它适用于具有更多项目的列表。)

于 2013-05-22T22:18:17.870 回答