找到列表中首先出现的特定数字的位置[python]

时间:2011-01-23 04:50:01

标签: python list position duplicates

所以我想找到一个在列表中出现多次的数字。我想要第一个的位置。

示例:说我想要3

     s = [1,2,3,4,5,3,9,8]  => s[2] appears first

7 个答案:

答案 0 :(得分:4)

def first_dup( seq ):
    # keep track of the positions
    seen = {}
    for pos,item in enumerate(seq):
        if item in seen:
            # saw it before, so its a duplicate
            return seen[item]
        else:
            # first time we see it, store the pos
            seen[item] = pos

答案 1 :(得分:1)

有点含糊不清的问题。

如果您只想查找特定元素首次出现的索引,则应使用list.index()方法:

index = s.index(3)

但是如果你

  

想要找到一个出现的数字   列表中不止一次

一般情况下(没有给出元素值),似乎可以

  • 在数组中进行简单的O(N ^ 2)搜索(检查每个元素的列表的所有元素,直到找到重复)
  • 或者排序,找到排序列表中的重复元素,然后使用list.index()方法找到原始数组中重复元素的索引 - 由于排序,这将需要O(N * log(N))。

答案 2 :(得分:1)

除非我误解了你的问题,否则这应该可以解决问题:

s = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 3]
for i in range(len(s)):
    if s.count(s[i]) > 1:
        return i

这应该为您提供在列表中多次出现的第一个元素的索引

如果这不是您所追求的,请发表评论,我将编辑代码。

答案 3 :(得分:0)

以下函数返回重复的第一次出现的索引

def find_first_duplicate(num_list):
        track_list =[]
        index = 0
        for e in num_list:
            if(e not in track_list):
                track_list += [e]
            else: ## found!
                return index
            index += 1

答案 4 :(得分:0)

这是另一种方式..

如果存在,它将返回第一个索引.. 如果没有可用的重复项,则会引发IndexError。

[s.index(_) for _ in s if s.count(_) > 1][0]

答案 5 :(得分:0)

另一种方法:

from operator import countOf

def multindex(seq):
    """ find index of first value occurring more than once
        in a sequence, else raise ValueError if there aren't any
    """
    for i,v in enumerate(seq):
        if countOf(seq, v) > 1:
            return i
    else:
        raise ValueError

print 's[{}] is first value in the list occurring more than once'.format(multindex(s))
# s[2] is first value in the list occurring more than once

答案 6 :(得分:-1)

s.index(3)

会根据您的意愿返回2

如果指定的项目不在列表中,

index将引发ValueError