पायथन में एक सूची पर लूपिंग


177

मेरे पास इसमें मौजूद सब्स्टलिस्ट के साथ एक सूची है। मैं सभी उपनलियों को 3 के बराबर लंबाई के साथ प्रिंट करना चाहता हूं।

मैं अजगर में निम्नलिखित कर रहा हूं:

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

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

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

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


1
क्या आप print valuesयहां आउटपुट कर सकते हैं और दिखा सकते हैं? संपादित करें: या बस जांचें कि यह रिक्त नहीं है।
ब्रिगैंड

1

जवाबों:


196

इसे इस्तेमाल करे,

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]

या यदि आपको अधिक पाइथोनिक उपयोग सूची-समझ की आवश्यकता है

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

15

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

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


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

1
अवांछित प्रति का उल्लेख करने के लिए धन्यवाद। @batbrat यह बाहर नहीं निकलता है, यह बंद हो जाता है, मेरा क्या मतलब है कि मूल्यों की नकल की जाती है, और अभी भी अंदर है values
AsTeR

स्पष्टीकरण देने के लिए धन्यवाद।
बैटब्रेट

14

यहाँ वह उपाय है जिसकी मुझे तलाश थी। यदि आप List2 बनाना चाहते हैं जिसमें List1 में संख्या तत्वों का अंतर है।

list1 = [12, 15, 22, 54, 21, 68, 9, 73, 81, 34, 45]
list2 = []
for i in range(1, len(list1)):
  change = list1[i] - list1[i-1]
  list2.append(change)

ध्यान दें कि जबकि len(list1)11 (तत्व) है, len(list2)केवल 10 तत्व होंगे क्योंकि हम लिस्ट 1 में एलिमेंट 1 से एलिमेंट वाले तत्व 1 से लिस्ट 1 से एलिमेंट के लिए लूप के लिए शुरू कर रहे हैं।


यह वही था जो मुझे चाहिए था जैसा कि मुझे इंडेक्स 1 से शुरू करने की जरूरत थी। 0. +1
टिम

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.