2012-02-04 12 views
61

में एक सूची में लूपिंग मेरे पास इसमें उपन्यासियों की एक सूची है। मैं मैं अजगर में निम्नलिखित कर रहा हूँ 3.पायथन

को लंबाई बराबर के साथ सभी उप-सूचियों प्रिंट करना चाहते हैं:

for x in values[:]: 
    if len(x)==3: 
     print x 

'मूल्यों' मूल सूची है। क्या उपरोक्त कोड x के प्रत्येक मान के लिए 3 के बराबर लंबाई के साथ सभी sublist मुद्रित करता है? मैं sublists को प्रदर्शित करना चाहता हूं जहां केवल length==3 केवल एक बार।

समस्या हल हो गई है। समस्या ग्रहण संपादक के साथ है। मैं कारण समझ नहीं पा रहा हूं, लेकिन जब मैं अपना लूप चलाता हूं तो यह मेरी सूची का केवल आधा हिस्सा प्रदर्शित करता है।

क्या कोई सेटिंग है जो मुझे ग्रहण में बदलनी है?

+2

तुम क्यों लंबाई 2 के साथ कोड में तो तुलना करते हैं ?! – kennytm

+0

क्या आप 'प्रिंट मान' कर सकते हैं और यहां आउटपुट दिखा सकते हैं? * संपादित करें: * या बस जांचें कि यह खाली नहीं है। – FakeRainBrigand

उत्तर

5

आप for x in values[:] के बजाय for x in values का भी उपयोग कर सकते हैं; उत्तरार्द्ध एक अनावश्यक प्रति बनाता है। इसके अलावा, निश्चित रूप से नहीं बल्कि 3 से अधिक 2 की लंबाई के लिए कि कोड की जाँच करता ...

कोड केवल x का मूल्य प्रति एक आइटम प्रिंट - और xvalues का तत्व है, जो उप-सूचियों हैं पर पुनरावृत्ति है। तो यह केवल एक बार प्रत्येक उपन्यास मुद्रित करेगा।

+4

मान [:] मूल्यों के सभी तत्वों को स्लाइस करता है, है ना? मुझे लगता है कि आप का मतलब स्लाइसिंग से बनाई गई अस्थायी सूची है। बस सुनिश्चित करना चाहते हैं। – batbrat

88

इस प्रयास करें,

x in mylist बेहतर और x in mylist[:] की तुलना में अधिक पठनीय है और अपने len(x)3 के बराबर होना चाहिए।

>>> mylist = [[1,2,3],[4,5,6,7],[8,9,10]] 
>>> for x in mylist: 
...  if len(x)==3: 
...  print x 
... 
[1, 2, 3] 
[8, 9, 10] 

या आप अधिक pythonic उपयोग की जरूरत है list-comprehensions

>>> [x for x in mylist if len(x)==3] 
[[1, 2, 3], [8, 9, 10]] 
>>>