【问题标题】:Python - is there a function similar to list.index() that is not affected by duplicated values in a list?Python - 是否有类似于 list.index() 的函数不受列表中重复值的影响?
【发布时间】:2012-12-24 18:21:45
【问题描述】:

list.index() 将为您提供该值第一次显示在列表中的索引,但我正在寻找一种方法来返回该特定项目的索引,无论是否重复,例如,如果要这样使用它:

lst = [1,4,5,1,4]

for i in lst:
    lst.something(i)

会回来

0
1
2
3
4

任何帮助表示赞赏

【问题讨论】:

  • 不,lst.something(1) 不可能知道是返回 0 还是 3,具体取决于 which 1 调用它。 int 是一个原始类型,所以 1 与另一个 1 相同。
  • 有没有办法让 for 循环知道它当前正在执行该功能的项目?如果有,它不能返回那个值吗?
  • 在这种情况下,您需要enumerate(请参阅下面@D.Shawley 的回答)
  • 我是否正确地说 enumerate 仅适用于迭代?我可以使用不需要它成为循环的一部分的类似功能吗?
  • 是的,枚举仅适用于迭代。你所要求的是不可能的;请看我的回答。

标签: python list function python-2.7


【解决方案1】:

你在找enumerate吗?

>>> lst = [1,4,5,1,4]
>>> for index, elm in enumerate(lst):
...  print index, elm
...
0 1
1 4
2 5
3 1
4 4
>>>

【讨论】:

  • 我认为这不是问题——我认为问题是lst.something(lst[0]) 返回0lst.something(lst[3]) 返回3,这是不可能的。
  • @DavidRobinson - 当然不可能,但通常是因为 OP 正在寻找 enumerate 背后的功能。
  • @DavidRobinson 如果您阅读了对 OP 评论的回复,我认为您错了。 :)
  • @DavidRobinson 是的,这就是我真正想要的;所以没有办法做到这一点?甚至通过定义一个新函数?
  • @Ricochet_Bunny:看我的回答
【解决方案2】:

使用枚举

for i,_ in enumerate(listt):
    print i

【讨论】:

  • 我更喜欢in range(len(listt))
【解决方案3】:

不,lst.something(1) 不可能知道返回 0 还是 3,具体取决于调用它时使用的 1。 int 是原始类型,因此任何 1 都与另一个 1 相同。

作为证明,您可以使用is 运算符:

lst = [1, 4, 5, 1, 4]
print lst[0] is lst[3]
# True

因此,当调用假设函数lst.something(1) 时,无论您如何调用它,它都不会知道您指的是哪个1

【讨论】:

  • 即使is 没有返回True——比如两个不同但相等的int对象——你仍然是对的。我认为平等是正确的条件,而不是身份。 enumerate 是在实践中尽可能接近的正确方法,但无法判断我们指的是哪个元素的事实是不可避免的。 (无论如何,假设随机访问:我们可以创建一个有状态的索引器,它会记住它在哪里,或者它产生了什么等等,但是我需要看一个用例,因为我怀疑会有一种更简单的方法可以到达那里,无论在哪里'会有'。)
  • 请注意,您的 is 测试返回 True 是 CPython 实现细节;对于 int() 的较大值,在任何 Python 实现中根本不正确。
猜你喜欢
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 2018-10-15
相关资源
最近更新 更多