दिलचस्प पोस्ट
"परतें" और "टायर्स" के बीच अंतर क्या है? Google Maps Places API V3 autocomplete – प्रवेश पर पहला विकल्प चुनें एक NSMutableArray ivar में आइटम नहीं जोड़ सकते सीतनिद्रा में होना एनोटेशन – कौन सा बेहतर है, क्षेत्र या संपत्ति का उपयोग? URL मैच करने के लिए रेगेक्स क्या localStorage.getItem ('आइटम') localStorage.item या localStorage से बेहतर है? फॉर्मडाटा का कैसे निरीक्षण करें? jquery: पुनर्निर्देशित किए बिना यूआरएल पते को परिवर्तित करें? क्यों MySQL एक विशेषता है जो एसक्यूएल मानकों के साथ संघर्ष जोड़ता है? क्यों InputStream # read () इंटर्न नहीं है और बाइट नहीं है? NSString पाठ रिवर्स मैं मॉलोक () के साथ कितना आवंटित किया है उससे ज्यादा स्मृति का उपयोग कर सकते हैं, क्यों? सीएसएस चयनकर्ता में एक तत्व आईडी में एक बृहदान्त्र को संभालना जावास्क्रिप्ट में + = "1,23,4" क्यों है? मैं एक ऐसी तालिका के लिए एसक्यूएल कैसे लिख सकता हूँ जो MySQL में संरक्षित कीवर्ड के समान नाम को साझा करता है?

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

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

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)]