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

我在列表中有一条记录

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

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

我使用以下命令:

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

它为我提供了“史密斯”

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

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

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

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

【问题讨论】:

    标签: python list


    【解决方案1】:

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

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

    【讨论】:

    【解决方案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

        【讨论】:

          猜你喜欢
          • 2021-03-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-20
          • 1970-01-01
          • 2017-09-15
          • 1970-01-01
          相关资源
          最近更新 更多