मुझे लगता है कि मुझे एक त्रुटि मिल रही है क्योंकि लूप के पुनरावृत्ति के दौरान सूची की सीमा कम हो जाती है। मेरे पास एक बड़ी सूची mega4 के भीतर 95 नेस्टेड सूचियां हैं, और मैं कुछ स्ट्रिंग्स को अगर और अन्य के साथ हटाने की कोशिश कर रहा हूं। सूची ufields में 18 तार हैं।

>>> for i in range(len(mega4)):
...     for j in range(len(mega4[i])):
...         for f in ufields:
...             if (f in mega4[i][j]) is False:
...                 mega4[i].remove(mega4[i][j])
...             else:
...                 pass
... 
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
IndexError: list index out of range

चौथी पंक्ति मूल रूप से पूछ रही है कि क्या mega4[i] के भीतर प्रत्येक तत्व में ufields के भीतर प्रत्येक स्ट्रिंग है, मैं इस मामले में mega4[i][j] को कैसे हटा सकता हूं?

संपादित करें:

मैंने नीचे टिप्पणियों का पालन किया और एक नई सूची बनाने की कोशिश की लेकिन यह काम नहीं कर रहा है

>>> mega5 = []
>>> for i in range(len(mega4)):
...     for f in ufields:
...         mega5.append([x for x in mega4[i] if f in x is True])

len(mega5), len(mega4) से बड़ा है जबकि यह वही होना चाहिए।

0
song0089 29 अप्रैल 2017, 15:31
जिस सूची (या अन्य संग्रह) पर आप पुनरावृति कर रहे हैं, उससे आइटम निकालना आम तौर पर एक अच्छा विचार नहीं है। यदि आप पीछे की ओर पुनरावृति करते हैं, तो आप इसे सुरक्षित रूप से कर सकते हैं, ताकि निष्कासन उन वस्तुओं के सूचकांकों को परिवर्तित न करे जिन्हें आपने अभी तक नहीं देखा है। लेकिन आम तौर पर वांछित वस्तुओं वाली एक नई सूची बनाने के लिए यह अधिक कुशल है क्योंकि हर बार जब आप किसी सूची से किसी आइटम को हटाते हैं तो सभी बाद की वस्तुओं को नीचे ले जाने की आवश्यकता होती है।
 – 
PM 2Ring
29 अप्रैल 2017, 15:44

2 जवाब

  1. ufields को कैसे परिभाषित किया जाता है, इस पर निर्भर करते हुए, आप if mega4[i][j] in ufields का उपयोग करके अंतरतम लूप को समाप्त कर सकते हैं।

  2. इस लूप के भीतर mega4 को संशोधित करने के बजाय, आप उन तत्वों की एक सूची बना सकते हैं जिन्हें आप चाहते हैं समाप्त करना चाहते हैं, और फिर वास्तविक उन्मूलन बाद में करें (इसके बजाय उम्मीदवारों की अपनी सूची पर लूपिंग करें mega4 ही)।

1
Scott Hunter 29 अप्रैल 2017, 15:36

आसान तरीका:

result = [[sub for sub in item if sub] for item in mega4]

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

1
zipa 29 अप्रैल 2017, 15:39
यह कैसे mega5 = [x for x in mega4[i] if (f in x) true है] से अलग है?
 – 
song0089
29 अप्रैल 2017, 15:59
is True और if sub पूरी तरह से अलग हैं। if sub, if not False के लिए छोटा है।
 – 
zipa
29 अप्रैल 2017, 18:57