दिलचस्प पोस्ट
पाठ देखें प्लेसहोल्डर स्विफ्ट EF5: डेटाबेस '{1}' के रूप में फ़ाइल '{0}' संलग्न नहीं कर सकता जब संयोजन दिया जाता है तो इंडेक्स (लेक्सिफ़ोग्राफिकल ऑर्डर) की गणना कैसे करें मैं jQuery के साथ IE 8 कैसे पता लगा सकता हूं? अनंत रिकर्सन के बिना मैं '==' ऑपरेटर ओवरलोड में नल के लिए कैसे जांचूं? सेलरी कार्य prefetching को समझना "शून्य * से गतिशील_कास्ट" मैं कैसे जांचूं कि सूची खाली है या नहीं? Google मानचित्र API के साथ माउस स्क्रॉल व्हील स्केलिंग को अक्षम कैसे करें ग्रिज टूलटिप पर डेटा जोड़ें जो कि इनपुट डेटासेट में समाहित है लेकिन सीधे विज़ में नहीं है वर्ग, संदर्भ और वस्तुओं क्या हैं? UITableViewCell में आलसी लोड छवियां बूटस्ट्रैप 3.1 कैरोसेल पर प्रत्येक आइटम के लिए अलग स्लाइड अवधि क्यों बराबर () विधि जब हमारे पास == ऑपरेटर है? जीआईटी रिपॉजिटरी में जीआईटी रिपॉजिटरी

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

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

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 से नीचे के नतीजे नतीजे में दिखाई न दें, मैं मान रहा हूँ कि मैं निकालने में कुछ गलत कर रहा हूं

Solutions Collecting From Web of "अजीब परिणाम जब सूची से आइटम को हटाने से"

आप उस सूची को संशोधित कर रहे हैं, जब आप इसे पुनरावृत्त करते हैं इसका मतलब है कि पहली बार लूप के माध्यम से, 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)]