2013-04-04 8 views
12

मैं पाइथन के लिए बहुत नया हूं .. मैं एक ऐसा फ़ंक्शन लिखने की कोशिश कर रहा हूं जो अलग-अलग सूचियों में एक सूची में अद्वितीय मानों को विलय करेगा। मैं सूचियों की एक झुकाव का नतीजा जारी रखता हूं। आखिरकार मैं अपनी तीन सूचियों-ए, बी, सी से अद्वितीय मूल्यों की एक सूची चाहता हूं। क्या कोई मुझे इस के साथ हाथ दे सकता है?अद्वितीय मूल्यों को मर्ज करने के लिए पायथन 3.3 फ़ंक्शन एक सूची में एकाधिक सूचियों को बनाने के लिए

def merge(*lists): 
    newlist = lists[:] 
    for x in lists: 
     if x not in newlist: 
      newlist.extend(x) 
    return newlist 

a = [1,2,3,4] 
b = [3,4,5,6] 
c = [5,6,7,8] 

print(merge(a,b,c)) 

मैं सूचियाँ की एक टपल हो रही है

([1, 2, 3, 4], [3, 4, 5, 6], [5, 6, 7, 8]) 
+3

इंडेंट महत्वपूर्ण है! पहले से सूचियों को जोड़ने के बजाय संघ का उपयोग करने के लिए – squiguy

उत्तर

16

तुम सिर्फ सेट की आवश्यकता हो सकती:

>>> a = [1,2,3,4] 
>>> b = [3,4,5,6] 
>>> c = [5,6,7,8] 
>>> 
>>> uniques = set(a + b + c) 
>>> uniques 
set([1, 2, 3, 4, 5, 6, 7, 8]) 
>>> 
3

आप के बारे में उन्हें मूल आदेश, सबसे आसान में किया जा रहा परवाह नहीं है तो और संभवतः सेट फ़ंक्शंस का उपयोग करना है:

>>> set().union(a, b, c) 
{1, 2, 3, 4, 5, 6, 7, 8} 

यदि आप मूल ऑर्डर के बारे में परवाह करते हैं (इस मामले में इसे संरक्षित करने के लिए सेट होते हैं, लेकिन इसकी गारंटी नहीं है), तो आप यह समझकर अपने मूल प्रयास को ठीक कर सकते हैं कि तर्क lists में सभी मूल का एक झुकाव है सूचियों आप में पारित इसका मतलब है कि यह खत्म हो पुनरावृत्ति आप उन सूचियों एक से प्रत्येक हो जाता है एक समय में, बल्कि उन में तत्वों की तुलना में - आप itertools मॉड्यूल का उपयोग करके इसे ठीक कर सकते हैं:।

for x in itertools.chain.from_iterable(lists): 
    if x not in newlist: 
     newlist.append(x) 

इसके अलावा, आप चाहते हैं इनपुट सूचियों की एक प्रति के बजाय एक खाली सूची के रूप में शुरू करने के लिए newlist चाहते हैं।

+0

+1। इसका मतलब है कि आप केवल सूचियों के बजाय अन्य पुनरावृत्तियों का उपयोग कर सकते हैं। – daboross

+0

ध्यान दें कि अद्वितीय मानों की संख्या के आधार पर 'नई सूची में' x को जांचने का समय प्रत्येक पुनरावृत्ति के लिए बढ़ेगा। –

0
def merge(*lists): 
    newlist = [] 
    for i in lists: 
      newlist.extend(i) 
    return newlist 

merge_list = merge(a,b,c,d) 

merge_list = set(merge_list) 

merge_list = list(merge_list) 

print(merge_list) 
संबंधित मुद्दे