Python中的负索引[重复]

Posted

技术标签:

【中文标题】Python中的负索引[重复]【英文标题】:Negative indexing in Python [duplicate] 【发布时间】:2014-06-19 07:38:02 【问题描述】:

我在列表中有一条记录

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

我正在尝试从此记录中获取姓氏“smith”

我使用以下命令:

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

它为我提供了“史密斯”

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

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

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

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

【问题讨论】:

【参考方案1】:

Python 列表可以使用负索引“反向索引”。 -1 表示最后一个元素,-2 表示倒数第二个,依此类推。碰巧在您的长度为 2 的列表中,最后一个元素也是索引 1 处的元素。

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

【讨论】:

与流行的看法相反,使用 -1 作为姓氏是不合逻辑的,甚至是不正确的 (kalzumeus.com/2010/06/17/…)【参考方案2】:

因为在这种情况下,您要拆分的列表是 ['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]

【讨论】:

【参考方案3】:

这是您的意见

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

这就是 bob[0] 给你的

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

你可以看到 bob[0] 只有两个元素,所以 1 给你第二个元素,-1 给你最后一个相同的元素

【讨论】:

【参考方案4】:

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

即:

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'

现在说了这么多;

不要假设名称由两个部分组成 不要假设名称的格式为 不要假设名字是一个单词 不要假设姓是一个单词 不要不要假设任何事情!!!

有关您可能错了的更详尽的列表,请参阅Falsehoods Programmers Believe About Names

【讨论】:

以上是关于Python中的负索引[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python - 替换熊猫数据框中的负无穷大值[重复]

RcppArmadillo:for循环中的负索引

基于共享存储器的1d模板CUDA实现中的负数组索引

Python中最小的负整数[重复]

Pandas Dataframe 中的索引行不在索引列表中(Python)[重复]

使用 Python 将索引设置为 csv 文件中的重复行值组