2013-07-22 5 views
5

में एक sublist का एक तत्व संलग्न करने के लिए मैं रूप में सूचियों की एक सूची है:कैसे अजगर

list = [[3, 1], [3, 2], [3, 3]] 

और मैं, दो सूचियों में विभाजित करने के लिए प्रत्येक sublist और एक की एक्स मूल्यों के साथ एक चाहते प्रत्येक उपन्यास के वाई मूल्यों के साथ।

मैं इस समय इस राशि:

x = y = [] 
for sublist in list: 
    x.append(sublist[0]) 
    y.append(sublist[1]) 

लेकिन वह इस देता है, और मैं पता नहीं क्यों:

x = [3, 1, 3, 2, 3, 3] 
y = [3, 1, 3, 2, 3, 3] 

उत्तर

10

x = y = [] करके आप x और y बना रहे हैं और उन्हें उसी सूची में संदर्भित कर रहे हैं, इसलिए गलत आउटपुट। (ऑब्जेक्ट आईडी नीचे समान हैं)

>>> x = y = [] 
>>> id(x) 
43842656 
>>> id(y) 
43842656 

यदि आप इसे ठीक करते हैं, तो आपको सही परिणाम मिल जाता है।

>>> x = [] 
>>> y = [] 
>>> for sublist in lst: 
     x.append(sublist[0]) 
     y.append(sublist[1]) 


>>> x 
[3, 3, 3] 
>>> y 
[1, 2, 3] 

हालांकि, यह करकर बहुत आसान बना दिया जा सकता है।

x,y = zip(*lst)

पी.एस. - कृपया एक चर नाम के रूप में list का उपयोग न करें, यह बिल्टिन को छाया करता है।

+4

'id' का अच्छा इस्तेमाल करते हैं। और 'सूची' के बारे में अच्छी बात है। –

+1

'ज़िप 'समाधान बहुत साफ है। –

4

जब आप कहते हैं कि x = y = [], आप होने के लिए x और y के कारण कर रहे हैं के समान सूची का संदर्भ। तो जब आप एक संपादित करते हैं, तो आप दूसरे को संपादित करते हैं। संदर्भों के बारे में एक अच्छा स्पष्टीकरण here है। अगर आप कहते हैं कि

इसलिए आप अपने कोड का उपयोग कर सकते बजाय

x = []; y = [] 

तुम भी zip करके देख सकते हैं:

lst = [[3, 1], [3, 2], [3, 3]] 
x,y = zip(*lst) 

और जैसा कि Sukrit कहते हैं, एक चर नाम के रूप में list का उपयोग नहीं करते (या int या str या आपके पास क्या है) क्योंकि यद्यपि यह एक पाइथन अंतर्निहित है (एक दुभाषिया लोड करें और help(list) टाइप करें - तथ्य यह है कि कुछ पॉप अप करने का अर्थ है पायथन पहले से परिभाषित है list कुछ मतलब है) पायथन खुशी से आपको फिर से परिभाषित करने देगा (a.k.a. छाया) यह। जो बाद में आपका कोड तोड़ सकता है।

2

ऐसा इसलिए है क्योंकि जब आप x और y बनाते हैं x = y = [] तो x और y एक ही सूची में इंगित करते हैं। आप उन्हें अलग-अलग सूचियां बनाना चाहते हैं, तो आप उन्हें

x = [] 
y = [] 
1

तरह की घोषणा करना चाहिए आप x = y = [] अर्थ एक्स y जो सूची की ओर इशारा करते है की ओर इशारा करते है की स्थापना कर रहे हैं ताकि जब भी आप एक के पीछे जोड़ने, तो आप दूसरे से जोड़कर कर रहे हैं ।कुछ इस तरह के कोड में परिवर्तित करें:

x = [] 
y = [] 
for sublist in list: 
    x.append(sublist[0]) 
    y.append(sublist[1]) 
0

आप कर सकते हैं:

x = [i[0] for i in list] 
y = [i[1] for i in list]