2014-05-14 21 views
6

Tôi đang cố sửa đổi định nghĩa này liệt kê các mục trùng lặp sao cho nó liệt kê các chỉ mục của các giá trị trùng lặp. Ngoài ra, tôi muốn nó liệt kê TẤT CẢ các bản sao có nghĩa là kết quả cho a = [1,2,3,2,1,5,6,5,5,5] sẽ là duplicate_indexes = [3,4,7 , 8,9] đây là định nghĩa:Liệt kê các chỉ mục các giá trị trùng lặp trong một danh sách với Python

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] 

Trả lời

6
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] 

Edit: Bạn chỉ có thể sử dụng danh sách hiểu chức năng đó, như

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] 
+0

Bạn đang sử dụng một thiết lập cho '' 'seen''' để làm bài kiểm tra thành viên Nhanh? – wwii

+0

@wwii Có. Bạn đúng là – thefourtheye

0
def list_duplicates_index(seq): 
    return [i for (i,x) in enumerate(a) if x in list_duplicates(a)] 
4

Danh sách hiểu biết này để in chỉ mục trùng lặp. Nó lát danh sách cho đến khi chỉ số được lựa chọn và trả về giá trị chỉ số nếu mục đã có mặt trong danh sách cắt lát

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] 
+0

+1 để có cả thông số kỹ thuật ngắn nhất và rõ ràng nhất, so với các câu trả lời khác. –

0
def list_duplicates(seq): 
    d = {} 
    for i in seq: 
     if i in d: 
      d[i] += 1 
     else: 
      d[i] = 1 
    dups = [] 
    for i in d: 
     if d[i] > 1: 
      dups.append(i) 
    lst = [] 
    for i in dups: 
     l = [] 
     for index in range(len(seq)): 
      if seq[index] == i: 
       l.append(index) 
     lst.append(l[1:]) 
    new = [] 
    for i in lst: 
     for index in i: 
      new.append(index) 
    return new 
Các vấn đề liên quan