2013-04-04 3 views
7

में एक सूची में डुप्लीकेट रखें मुझे पता है कि यह शायद एक आसान जवाब है लेकिन मैं इसे समझ नहीं सकता।पायथन

x = [1,2,2,2,3,4,5,6,6,7] 

उत्पादन किया जाना चाहिए::

[2,6] 

मैं इस लिंक मिल गया: एक सूची में डुप्लिकेट रखने के लिए अजगर में सबसे अच्छा तरीका क्या है Find (and keep) duplicates of sublist in python, लेकिन मैं अभी भी अपेक्षाकृत अजगर करने के लिए नया हूँ और मैं इसे एक साधारण सूची के लिए काम नहीं कर सकता।

+0

आप उस पोस्ट में एक liners में से एक की कोशिश की? –

+0

क्या आपको ऑर्डर को सुरक्षित रखने की आवश्यकता है? – DSM

+0

@DSM - ऐसा लगता है कि हम एक ही चीज़ सोच रहे थे ... – mgilson

उत्तर

8

यह यह करने के लिए एक छोटी तरह से करता है, तो सूची पहले से ही हल कर रहा है:

x = [1,2,2,2,3,4,5,6,6,7] 

from itertools import groupby 
print [key for key,group in groupby(x) if len(list(group)) > 1] 
+1

यह python2.6 के साथ भी काम करेगा जो मेरे साथ एक समस्या है। – mgilson

+0

यह काम एक unordered सूची के साथ भी होगा? – luchosrock

+0

@ लूचोसॉक: नहीं, 'ग्रुपबी' समूह लगातार तत्व –

12

मैं का उपयोग करेंगे एक collections.Counter:

from collections import Counter 
x = [1, 2, 2, 2, 3, 4, 5, 6, 6, 7] 
counts = Counter(x) 
output = [value for value, count in counts.items() if count > 1] 

यहाँ एक और संस्करण है जो के आदेश रहता है जब आइटम को पहली बार डुप्लिकेट किया गया था जो केवल मानता है कि अनुक्रमित अनुक्रम में हैशबल आइटम शामिल हैं और यह तब तक काम करेगा जब set या yeild भाषा (जब भी था) से पेश किया गया था।

def keep_dupes(iterable): 
    seen = set() 
    dupes = set() 
    for x in iterable: 
     if x in seen and x not in dupes: 
      yield x 
      dupes.add(x) 
     else: 
      seen.add(x) 

print list(keep_dupes([1,2,2,2,3,4,5,6,6,7])) 
+0

हालांकि आप आउटपुट में तत्वों का ऑर्डर खो देते हैं। –

+0

हाँ। ऐसी कई स्थितियां हैं जहां यह जाने का सबसे अच्छा तरीका नहीं है। यह इनपुट को हर्षनीय होने की भी आवश्यकता है ... लेकिन, यह ओ (एन) गैर-क्रमबद्ध सूचियों के लिए भी अच्छा है जो अच्छा है। – mgilson

+0

सबसे कम आदेशित संस्करण मैं ऑफहैंड के बारे में सोच सकता हूं '[के] के लिए ऑर्डर किया गया है अगर ऑर्डरर्ड डिक्ट.फॉर्म्स (एक्स) में के लिए [के]> 1] '। – DSM

0

keepin 'यह आसान:

array2 = [] 
aux = 0 
aux2=0 
for i in x: 
    aux2 = i 
    if(aux2==aux): 
     array2.append(i) 
    aux= i 
list(set(array2)) 

यही काम करना चाहिए

+0

क्या यह '2,2,6]' नहीं देगा? – DSM

+0

@DSM अहहा आप पूरी तरह से सही हैं, मैंने अपना जवाब संपादित किया, धन्यवाद :) – luchosrock