दिलचस्प पोस्ट
मैं C ++ में सीएसवी फ़ाइलों को पढ़ और पार्स कैसे कर सकता हूं? जावास्क्रिप्ट ऑब्जेक्ट्स: पेरेंट प्राप्त करें सॉकेट.ओ 1.0 में कक्ष की क्लाइंट सूची कैसे प्राप्त करें एक पेड़ में एक फ्लैट तालिका को पार्स करने के लिए सबसे कुशल / सुरुचिपूर्ण तरीका क्या है? IDispatch :: लागू करें एक WebBrowser नियंत्रण के द्वारा बुलाया आमंत्रित करें स्ट्रिंग से ट्यूपल को पार्स करते हैं? एक नोड। जेएस परियोजना के लिए फ़ोल्डर संरचना एक अलग विधानसभा में ResourceDictionary स्विफ्ट में दृश्य नियंत्रकों के बीच डेटा पास करना RichTextBox में चुनिंदा रंगीन टेक्स्ट XML कैरिज वापसी एन्कोडिंग यूआरआई के साथ HTTP अनुरोध के लिए कोई मानचित्रण नहीं मिला एक आदिम फ्लोट मान -0.0 कैसे हो सकता है? इसका क्या मतलब है? Google खाता लॉगआउट और रीडायरेक्ट अजगर पंडस एकत्रीकरण परिणाम से वैज्ञानिक नोटेशन को प्रारूपित / दबाएं

अजीब परिणाम जब सूची से आइटम को हटाने से

मुझे कोड का यह टुकड़ा मिला है:

numbers = range(1,50) for i in numbers : if i < 20 : print "do something" numbers.remove(i) print numbers 

लेकिन परिणाम मैं प्राप्त कर रहा हूं:

[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 2 9, 30, 31, 32, 33, 34, 35 , 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]

बेशक, मैं नतीजों की उम्मीद करता हूं कि 20 से नीचे के नतीजे नतीजे में दिखाई न दें, मैं मान रहा हूँ कि मैं निकालने में कुछ गलत कर रहा हूं

वेब के समाधान से एकत्रित समाधान "अजीब परिणाम जब सूची से आइटम को हटाने से"

आप उस सूची को संशोधित कर रहे हैं, जब आप इसे पुनरावृत्त करते हैं इसका मतलब है कि पहली बार लूप के माध्यम से, i == 1 , इसलिए सूची से 1 हटा दिया जाता है। तब लूप के for सूची में दूसरे आइटम पर जाता है, जो 2 नहीं है, लेकिन 3! तब सूची से निकाल दिया जाता है, और फिर लूप सूची में तीसरे मद पर जाता है, जो अब 5 है। और इसी तरह। शायद यह देखने के लिए आसान है कि i ^ के मूल्य की ओर इशारा करते हुए:

 [1, 2, 3, 4, 5, 6...] ^ 

यह शुरूआत में सूची की स्थिति है; तो 1 को हटा दिया जाता है और सूची में दूसरा आइटम लूप जाता है:

 [2, 3, 4, 5, 6...] ^ [2, 4, 5, 6...] ^ 

और इसी तरह।

एक सूची की लंबाई को बदलने के लिए कोई बेहतर तरीका नहीं है, इसके चलते। सबसे अच्छा आप ऐसा कर सकते हैं ऐसा कुछ है:

 numbers = [n for n in numbers if n >= 20] 

या यह, इन-प्लेस फेर्रिकेशन के लिए (पैरों में बात एक जनरेटर अभिव्यक्ति है, जो कि सम्मिलित रूप से टुकड़े-असाइनमेंट से पहले ट्यूपल में परिवर्तित हो जाती है):

 numbers[:] = (n for in in numbers if n >= 20) 

यदि आप इसे हटाने से पहले n पर एक ऑपरेशन करना चाहते हैं, तो आप कोशिश कर सकते हैं एक ऐसी चाल है:

 for i, n in enumerate(numbers): if n < 20 : print "do something" numbers[i] = None numbers = [n for n in numbers if n is not None] 

@ प्रेषक एशर वे तरह से जाने के लिए नहीं है!

यदि आप इसके बारे में सोचते हैं, तो आगे भी थोड़ा अधिक अपनी समस्या का वर्णन करने के लिए कहा, आप हमेशा बीस गुना सूचकांक निकालना चाहते हैं:

 [1,2,3,4,5............50] ^ [2,3,4,5............50] ^ [3,4,5............50] ^ 

तो आप वास्तव में इस तरह से कुछ के साथ जा सकते हैं:

 aList = range(50) i = 0 while i < 20: aList.pop(0) i += 1 print aList #[21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49] 

मुझे उम्मीद है यह मदद करेगा।


नीचे एक अच्छा अभ्यास AFAIK नहीं हैं

संपादित करें (कुछ और):

 lis = range(50) lis = lis[20:] 

नौकरी भी करेंगे

EDIT2 (मैं ऊब रहा हूं):

 functional = filter(lambda x: x> 20, range(50)) 

सूची से आइटम निकालना सरल है: सूची के अंत में शुरू करें:

 li = range(1,15) print li,'\n' for i in xrange(len(li)-1,-1,-1): if li[i] < 6: del li[i] print li 

परिणाम

 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] [6, 7, 8, 9, 10, 11, 12, 13, 14] 

मुझे वास्तव में @ सेंडरले का जवाब दिया गया है। केवल एक चीज जो मैं जोड़ना चाहती हूं (मैंने टिप्पणी की थी, लेकिन उचित कोड स्वरूपण नहीं प्राप्त कर सकते हैं) यह है कि यदि आप अपने कार्यों को समय से पहले ही घोषित करते हैं तो आप अपनी सूची की समझ के लिए पक्ष प्रसंस्करण से भी दूर हो सकते हैं:

 def checkRemoval(item): # some processing here return passed_inspection # Should be True / False. newList = [item for item in oldList if checkRemoval(item)]