索引列表与len(列表)vs len(列表) - 1

时间:2013-05-22 22:16:26

标签: python list python-2.7

#!/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))]

第一个print语句不打印列表中的最后一个元素。第二个print语句打印列表中的所有元素没有越界错误。从文档中我理解len()只返回元素的数量在列表中。那么为什么最后一个索引不是len(list) - 1

2 个答案:

答案 0 :(得分:6)

列表切片从不会抛出越界错误:

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]

答案 1 :(得分:3)

因为上限不包括在内。这意味着如果您的列表包含1个元素,则需要将1而不是0放入切片中。 list[0:0]实际上是一个空切片,如果上限是包含的,则无法获得空切片。要仅使用第一个元素获得切片,您需要list[0:1]代替。

(我使用的列表只包含1个元素,因为它非常简单易懂。显然它适用于包含更多项目的列表。)