使用Python列出列表中重复值的索引

kon*_*rad 9 python indexing list-comprehension list duplicates

我试图修改这个列出重复项的定义,以便列出重复值的索引.另外,我希望它列出所有重复项,这意味着a = [1,2,3,2,1,5,6,5,5,5]的结果将是duplicate_indexes = [3,4,7] ,8,9]这是定义:

def list_duplicates(seq):
    seen = set()
    seen_add = seen.add
    # adds all elements it doesn't know yet to seen and all other to seen_twice
    seen_twice = set( x for x in seq if x in seen or seen_add(x) )
    # turn the set into a list (as requested)
    return list( seen_twice )

a = [1,2,3,2,1,5,6,5,5,5]
list_duplicates(a) # yields [1, 2, 5]
Run Code Online (Sandbox Code Playgroud)

Kar*_*hik 12

列表理解以打印重复索引.它将列表切片直到所选索引,如果项目已存在于切片列表中,则返回索引值

a= [1, 2, 3, 2, 1, 5, 6, 5, 5, 5]
result=[idx for idx, item in enumerate(a) if item in a[:idx]]
print result #[3, 4, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)

  • 与其他答案相比,+ 1是最短,最清楚表达规范的地方。 (2认同)

the*_*eye 8

a, seen, result = [1, 2, 3, 2, 1, 5, 6, 5, 5, 5], set(), []
for idx, item in enumerate(a):
    if item not in seen:
        seen.add(item)          # First time seeing the element
    else:
        result.append(idx)      # Already seen, add the index to the result
print result
# [3, 4, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)

编辑:您可以在该功能中使用列表推导,就像这样

def list_duplicates(seq):
    seen = set()
    seen_add = seen.add
    return [idx for idx,item in enumerate(seq) if item in seen or seen_add(item)]

print list_duplicates([1, 2, 3, 2, 1, 5, 6, 5, 5, 5])
# [3, 4, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)