关于列表:python中的负索引

Negative indexing in Python

本问题已经有最佳答案,请猛点这里访问。

我有一张单子上的记录

1
>>> bob =['bob smith',42,30000,'software']

我想从这张唱片里找出史密斯的姓

我使用以下命令:

1
>>> bob[0].split()[1]

它提供给我"史密斯"

但我所指的书使用以下命令:

1
>>> bob[0].split()[-1]

它也给了我同样的结果"史密斯"

为什么索引[1]和[-1]提供相同的结果?


python列表可以使用负索引进行"反向索引"。-1表示最后一个元素,-2表示第二个到最后一个元素,依此类推。恰好在长度为2的列表中,最后一个元素也是索引1中的元素。

你的书建议使用-1,因为从逻辑的角度来看它更合适。您不需要索引1中的项目本身,而是需要列表的最后一个元素,即姓氏。例如,如果还包括中间名呢?那么,使用1的索引将不起作用,而使用-1的索引将不起作用。


这是你的意见

1
2
In [73]: bob
Out[73]: ['bob smith', 42, 30000, 'software']

这是鲍勃给你的

1
2
In [74]: bob[0]
Out[74]: 'bob smith'

如您所见,bob[0]只有两个元素,所以1给您第二个元素,-1给您最后一个相同的元素


因为在这种情况下,您要拆分的列表是['adam', 'smith']。因此,bob[0].split()[1]将返回第二个元素(不要忘记列表索引是基于0的),而bob[0].split()[-1]将返回最后一个元素。

由于列表的大小为2,第二个(索引1和最后一个(索引-1相同)。

一般来说,如果你有一个清单my_list,那么my_list[len(my_list) - 1] == my_list[-1]


正索引从列表开始计数,负索引从列表结束计数。

即:

1
2
3
4
bob[0].split()[0] == 'bob'
bob[0].split()[1] == 'smith'
bob[0].split()[-1] == 'smith'
bob[0].split()[-2] == 'bob'

现在假设你有一个中间名:

1
jane =['jane elizabeth smith', 42, 30000, 'software']

jane[0].split()[1]给简取中间名'elizabeth'jane[0].split()[-1]给简取姓氏'smith'

说了这一切,

  • 不要假定名称由两个组件组成
  • 不要假定名称的形式为
  • 不要假定名字是一个词
  • 不要假定姓氏是一个词
  • 不要想当然!!!!

如果你想更全面地了解一些你可能会犯错误的事情,那就看看程序员对名字的错误吧。