Python中的负索引

1 投票
4 回答
4247 浏览
提问于 2025-04-18 05:08

我在一个列表里有一条记录

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

我想从这条记录中获取姓氏'smith'

我使用了下面的命令:

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

它给了我'smith'

但是我参考的书里用的是下面的命令:

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

它也给了我同样的结果'smith'

为什么索引[1]和[-1]会给出相同的结果呢?

4 个回答

0

这是你的输入

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

这是 bob[0] 给你的结果

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

你可以看到 bob[0] 只有两个元素,所以用 1 可以得到第二个元素,而用 -1 则可以得到最后一个元素,这两个结果是一样的。

0

正数索引是从列表的开头开始计数的,负数索引是从列表的末尾开始计数的。

也就是说:

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

假设你有一个人有中间名:

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

jane[0].split()[1] 会给你Jane的中间名 'elizabeth',而 jane[0].split()[-1] 会给你她的姓 'smith'

说完这些;

  • 千万不要假设一个名字由两个部分组成
  • 千万不要假设名字的形式是 <名字> <姓氏>
  • 千万不要假设名字只有一个词
  • 千万不要假设姓氏只有一个词
  • 千万不要假设任何事情!!!

想了解更多可能会出错的地方,可以查看 程序员对名字的错误认知

0

因为在这个例子中,你要拆分的列表是 ['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] 这个表达式是成立的。

5

在Python中,列表可以通过负数索引来访问。比如说,-1代表最后一个元素,-2代表倒数第二个,以此类推。你有一个长度为2的列表,最后一个元素恰好也是索引为1的元素。

你的书建议使用-1,因为从逻辑上讲,这样更合适。你其实并不想要索引为1的元素,而是想要列表中的最后一个元素,也就是最后的名字。假设列表中还包含一个中间名呢?那样的话,使用索引1就不合适了,而使用-1就可以正确获取最后一个元素。

撰写回答