2016-08-16 12 views
5

Nasıl listede sadece iki katına bulmak için?Liste python'da yalnızca çiftler nasıl bulunur ve ayrılır?

  1. üç listesinde (a, b, c), bir koleksiyon (dict)
  2. uzun: algoritma

    import collections 
    a = [1,2,3,4,5,2,4,5] 
    b = [] 
    
    for x,y in collections.Counter(a).items(): 
        if y>1: 
         b.append(x) 
    
    print(b) # [2, 4, 5] 
    
    c = [] 
    for item in a: 
        if item in b: 
         c.append(item) 
    
    print(c) # [2, 4, 5, 2, 4, 5] 
    

    Benim versiyonu böyle

    c kod kusurları olarak sonucu bulmak gerek beni terk listesine ihtiyacımız kod

değerleri örnek iki katına çıkar. x = [1,2,2,2,3,4,5,6,6,7], ihtiyacı [2,2,2,6,6] değil [2,6]

+0

Evet o c liste baskı (c) # [2, 4, 5, 2, 4, 5] – Igor

cevap

14
from collections import Counter 

a = [1, 2, 3, 4, 5, 2, 4, 5] 
counts = Counter(a) 
print([num for num in a if counts[num] > 1]) 
+1

da (counts.items bir dict 'x [x, y olarak sayar kullanmak Could) olarak doğru, sırası önemli ise y> 1] ' – sberry

+1

rağmen, daha sonra yayınlanmıştır çözüm en iyisi eğer. – sberry

+1

OP, listede geri gönderilecek kopyalar gerektirir. Bir sözlük olduğu için, öğeleri tekrarlamak bunu yapmayacaktır. – Karin

5

değil en verimli şekilde, ama çok özlü:

a = [1,2,3,4,5,2,4,5] 
b = [x for x in a if a.count(x) > 1] 
print(b) 
+0

Evet ve list.count' bütün listesine her zaman için tarama için, bu yüzden, bu yağ Karin'ın O (n) çözeltisi ile karşılaştırıldığında (n^2) 'dir. a' çok kısa 'eğer O (n) çalışır rağmen Sayaç tam hızlı bile olmadığından OTOH, bu, daha hızlı _might_. –

+2

Bu doğru. Karin'in çözümü verimli ve zariftir. Okumaktan zevk alan kod. –

1

@Karin neredeyse bence o vardı, ama sonuç kümesi olmayacaktır.

from collections import Counter 

a = [1, 2, 3, 4, 5, 2, 4, 5] 
counts = Counter(a) 
print({k for k, v in counts.items() if v >= 2}) 

DÜZENLEME: Bir çift ya da daha sık birlikte şeyle değerler için OP tarafından Ek yorum açıklama: Ahh,

print([x for x in a if counts[x] >= 2]) 

EDIT2 "ayrılmanın tek katına".

+1

OP çiftleri içeren bir liste gerektirir ("Beni, liste değerlerini terk yalnızca benzersiz gerekmez"). Gerekli çıktı '[2, 4, 5, 2, 4, 5]' dir. Yorumlamak bana biraz zaman aldı :) – Karin

+1

Ayrıca, OP Python 3.x kullanıyor! ;) – dalanmiller

+1

Ayrıca, düzenleme yine aynı nedenden dolayı çalışmayacak. Sayımlar bir sözlük ise, tuşlar her zaman benzersiz olacaktır ... bu nedenle yine de listeden çiftleri geri göndermeyeceksiniz. – Karin

İlgili konular