【问题标题】:Why does Python list not have unique index for contiguous duplicate elements?为什么 Python 列表没有连续重复元素的唯一索引?
【发布时间】:2019-04-14 14:19:29
【问题描述】:

我正在存储一个包含元素 [0, 1, 2, 3, 4, 4] 的列表。当我遍历它并打印每个元素索引时,我的输出是这样的

0
1
2
3
4
4

我只是想如果它只是打印元素,所以我尝试了另一个输入 [1,2,3,4,5,6,7],这次我得到了正确的索引,例如

0
1
2
3
4
5
6

为什么会发生这种情况,我该如何解决?

n=input()

l=list(input().split())

print(l)

for i in l:
      print(l.index(i))

预期输出:

0
1
2
3
4
5

实际输出:

0
1
2
3
4
4

【问题讨论】:

  • 如果你想要你正在迭代的项目的索引,为什么不使用enumerate
  • 没有什么可以“解决”的。 index() 返回给定值的 first 位置。如果你不想这样,不要使用index()

标签: python list indexing


【解决方案1】:

索引未按预期工作

.index() 不会返回数组中项目的索引,它会返回第一个索引 或值的位置(请参阅this)。

在您的代码中

l = [0, 1, 2, 3, 4, 4]

for i in l:
      print(l.index(i)) #i is the value itself

实际发生的情况是,每次它都在搜索值i 的第一次出现。在列表l = [0, 1, 2, 3, 4, 4] 中,当您到达最后4 个时,您实际上要求Python 给您“列表l4 的第一次出现”,因此python 给您“索引”4。

在 JavaScript 中,它相当于 array.indexOf(val)

您在寻找什么: enumerate 函数

for ind, val in enumerate(l):
    ...

【讨论】:

    【解决方案2】:

    list_name.index(i) 返回该元素的第一个出现索引
    因此,如果您的列表是:[1,2,3,4,5,6,5]
    您通过迭代打印出l.index(i),输出将是。
    0 1 2 3 4 5 4
    因为 5 第一次出现在列表中的第 4 位。

    【讨论】:

      【解决方案3】:

      如果您想获取列表中元素的位置,请使用 enumerate()。

      或者,如果您只想打印值:

      for i in l:
          print(i)
      

      文档:

      https://docs.python.org/3/tutorial/datastructures.html?highlight=list%20index

      list.index(x[, start[, end]])

      返回 第一个项目的列表中从零开始的索引,其值为 等于 x。如果没有这样的项目,则引发 ValueError。

      https://docs.python.org/3/library/functions.html#enumerate

      枚举(可迭代,开始=0)

      返回一个枚举对象。 iterable 必须是一个序列,一个迭代器, 或其他支持迭代的对象。 下一个() 方法 enumerate() 返回的迭代器返回一个元组,其中包含一个 计数(从默认为 0 的开始)和从中获得的值 迭代可迭代。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-02
        • 2020-01-25
        • 2020-12-24
        • 2021-09-30
        • 2021-01-12
        • 2019-09-19
        • 1970-01-01
        • 2019-11-11
        相关资源
        最近更新 更多