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中的负索引[重复]的主要内容,如果未能解决你的问题,请参考以下文章