दिलचस्प पोस्ट
कहाँ zsh में $ PATH चर asserttions जगह है? NSMutableString के रूप में बनाए रखने / प्रतिलिपि "तर्क-आश्रित लुकअप" (उर्फ एडीएल, या "कोइनेग लुकअप") क्या है? क्या यह जानने के लिए कोई उपकरण है कि मूल्य में एक अस्थायी बिंदु चर के रूप में सटीक द्विआधारी प्रतिनिधित्व है? एक्शनबार टैब बदलते हुए कार्यक्रम को रंगीन रूप से रेखांकित करते हैं मैं OpenXml 2.0 का इस्तेमाल करते हुए माइक्रोसॉफ्ट वर्ड में किसी भी फाइल प्रकार को कैसे एम्बेड कर सकता हूं मैं पर्ल में हैश कैसे जोड़ सकता हूं? आईएसओ में NSURL कनेक्शन और मूल HTTP प्रमाणीकरण आईओएस में एक यूआईटीक्श्वेव्यू में अनुवादित पाठ पर नल का पता लगा रहा है सूची के तत्वों के सभी संभव संयोजन कैसे प्राप्त करें? एक UIView धक्का जब UITabBar छुपा कैसे jquery के साथ केवल एक शैली संपत्ति को दूर करने के लिए जावास्क्रिप्ट: पारित वैरिएबल का तर्क मान और नाम प्राप्त करें एंड्रॉइड में वर्तमान में चल रहे कार्य को कैसे मारना Python re.match के साथ स्ट्रिंग निकालें

पायथन में लूप के लिए सूची तत्वों को कैसे निकालें?

मेरे पास एक सूची है

a = ["a", "b", "c", "d", "e"] 

मैं नीचे की तरह लूप में इस सूची में तत्वों को निकालना चाहता हूं:

 for item in a: print item a.remove(item) 

लेकिन यह काम नहीं करता है मैं क्या कर सकता हूँ?

Solutions Collecting From Web of "पायथन में लूप के लिए सूची तत्वों को कैसे निकालें?"

आपको लूप का उपयोग करते हुए उस पर दोहन करते समय सूची में तत्वों को निकालने की अनुमति नहीं है।

कोड को फिर से लिखने का सबसे अच्छा तरीका यह निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं।

उदाहरण के लिए, आपका कोड समतुल्य है:

 for item in a: print item a[:] = [] 

वैकल्पिक रूप से, आप while लूप का उपयोग कर सकते हैं:

 while a: print a.pop(0) 

मैं आइटम निकालने का प्रयास कर रहा हूं अगर वे एक शर्त से मेल खाती हैं फिर मैं अगले आइटम पर जाता हूं।

आप प्रत्येक तत्व की प्रतिलिपि बना सकते हैं जो शर्त को दूसरी सूची में मेल खाती है:

 result = [] for item in a: if condition: result.append(item) a = result 

वैकल्पिक रूप से, आप filter या सूची की समझ का उपयोग कर सकते हैं और परिणाम को वापस a असाइन कर सकते हैं:

 a = filter(lambda item:... , a) 

या

 a = [item for item in a if ...] 

जहां ... उस स्थिति के लिए है जिसे आपको जांचना है

पाश की एक प्रति के माध्यम से दोहराएं:

 >>> a = ["a", "b", "c", "d", "e"] >>> for item in a[:]: print item if item == "b": a.remove(item) a b c d e >>> print a ['a', 'c', 'd', 'e'] 

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

यदि कोई प्रतिलिपि किसी कारण के लिए कोई विकल्प नहीं है, तो आपके पास एक अन्य विकल्प है, जो उस सूची को संशोधित करने के बारे में समझने पर निर्भर करता है कि आप ब्रेक चलती हैं सूचकांक का ट्रैक रखते हुए चलने की सूची काम करती है, जब तक कि यह सूची के अंत से गिरने तक प्रत्येक बार लूप के चारों ओर बढ़ते हुए बढ़ता रहता है। इसलिए, यदि आप वर्तमान सूचकांक (या उससे पहले) को हटा देते हैं, तो उस बिंदु से सब कुछ तब तक हो जाता है जब तक कि अंत में एक जगह बायीं ओर बदल जाती है लेकिन इटरेटर इस बारे में नहीं जानता है, और अगले तत्व को प्रभावी ढंग से छोड़ देता है क्योंकि यह अब अगले एक की बजाय वर्तमान सूचकांक पर है। हालांकि, मौजूदा सूचकांक के बाद होने वाली चीजों को हटाने से चीजों को प्रभावित नहीं होता है।

इसका अर्थ यह है कि यदि आप सूची को वापस सामने से दोहराते हैं, यदि आप वर्तमान सूचकांक में किसी आइटम को हटा देते हैं, तो यह सब सही शिफ्ट छोड़ दिया जाता है – लेकिन इससे कोई फर्क नहीं पड़ता, क्योंकि आपने पहले से ही सभी तत्वों के साथ दाहिनी ओर वर्तमान स्थिति, और आप बाईं तरफ बढ़ रहे हैं – बाईं ओर अगले तत्व परिवर्तन से अप्रभावित है, और इसलिए इटरेटर आपको आपके द्वारा अपेक्षित तत्व देता है।

टी एल; डॉ:

 >>> a = list(range(5)) >>> for b in reversed(a): if b == 3: a.remove(b) >>> a [0, 1, 2, 4] 

हालांकि, एक कॉपी बनाना आपके कोड को पढ़ने में आसान बनाने के मामले में बेहतर होता है मैं केवल पूर्णता के लिए इस संभावना का उल्लेख करता हूं

एक नई सूची बनाने और उन तत्वों को जोड़ने के बारे में, जिनकी आप नई सूची चाहते हैं आप एक सूची के जरिए तत्वों को हटा नहीं सकते हैं

 import copy a = ["a", "b", "c", "d", "e"] b = copy.copy(a) for item in a: print item b.remove(item) a = copy.copy(b) 

कार्य करता है: जिस सूची को आप पुनरावृत्त कर रहे हैं उसे बदलने से बचने के लिए, आप एक की प्रतिलिपि बनाते हैं, इसे फिर से दोहराते हैं और आइटम को b से हटा देते हैं। फिर आप b प्रतिलिपि (प्रतिलिपि बनाकर) वापस a को कॉपी करें

शायद थोड़ा जवाब देने में देर हो चुकी है लेकिन मुझे यह धागा मिल गया है और मैंने इसके लिए अपना खुद का कोड बनाया था …

  list = [1,2,3,4,5] deleteList = [] processNo = 0 for item in list: if condition: print item deleteList.insert(0, processNo) processNo += 1 if len(deleteList) > 0: for item in deleteList: del list[item] 

यह करने का एक लंबा रास्ता हो सकता है लेकिन अच्छी तरह से काम करने लगता है। मैं एक दूसरी सूची बनाता हूं जो केवल संख्याओं को रखता है जो सूची आइटम से हटाना है। ध्यान दें कि "सम्मिलित करें" सूची आइटम नंबर को स्थिति 0 पर सम्मिलित करता है और वस्तुओं को हटाते समय शेष को धक्का देता है, तो सूची को सबसे अधिक संख्या से सबसे कम संख्या में हटा दिया जाता है ताकि सूची अनुक्रम में रहती है।

निकालें फ़ंक्शन सूची में प्रथम तत्व को निकाल देता है (0 वां अनुक्रमणिका तत्व)। आपके लूप के पहले पुनरावृत्त में आप सूचकांक 0 से शुरू करते हैं, इसे प्रिंट करें। जैसा कि आप सूचकांक 1 पर जाते हैं, आपके पास सूचकांक स्थान पर 'ए' नहीं है लेकिन आपके पास 'बी' का स्थान है। तो आपको क्या मिलेगा 'सी' तो यह कोड टुकड़ा सूची तत्वों को भी सूचकांक संख्याओं के साथ ही मुद्रित करेगा।