2010-02-02 6 views

उत्तर

18

एक सूची समझ का उपयोग करें:

a[:] = [x for x in a if x != [1, 1]] 
+2

मैं लिख पता 'यहां where' आकर्षक, इग्नेसियो, एसक्यूएल के साथ तुलना करके है ... लेकिन यह काम नहीं करता! आपको इसे 'if'' करना होगा, जैसा कि मैंने अपने उत्तर में किया था। –

+0

@Alex: Argh, हाँ, दाएं, तय। –

28

आप यथा-स्थान सूची को संशोधित करना चाहते हैं, या एक समारोह के रूप:

def remove_all(element, list): 
    return filter(lambda x: x != element, list) 

a = remove([1,1],a) 

या अधिक सामान्य:

def remove_all(elements, list): 
    return filter(lambda x: x not in elements, list) 

a = remove(([1,1],),a) 
+0

क्यों 'ए' के ​​बजाय 'a [:]' सेट करें? – Raj

+1

@राज: 'ए = [1]; बी = ए; ए = [2]; बी == [1] '; 'ए = [1]; बी = ए; एक [:] = [2]; बी == [2] '। – ephemient

+2

@Raj 'a' वह बॉक्स नहीं है जिसे आपने ऑब्जेक्ट्स रखा है - यह एक नाम टैग है जिसे आप ऑब्जेक्ट्स से जोड़ते हैं। 'a = ...' नाम को किसी नए ऑब्जेक्ट से जोड़ता है, लेकिन 'a [:]' उस सूची के सभी आइटमों को प्रतिस्थापित करता है जो 'a' नई सूची की सामग्री से बंधे हैं। – wizzwizz4

3
new_list = filter(lambda x: x != [1,1], a) 

[x for x in a if x != [1, 1]] 
+0

यह देखते हुए कि 'list.remove' पहले से क्या करता है, मैं शायद इस फ़ंक्शन को' हटाएं 'कहूंगा। – ephemient

+0

..... ठीक है:) ..... –

5
def remAll(L, item): 
    answer = [] 
    for i in L: 
     if i!=item: 
      answer.append(i) 
    return answer 
+0

सोचा कि यह दूसरों की तुलना में लंबा दिखता है, लेकिन कोड वास्तव में साफ, पठनीय और कुशल है। –

7

गूगल Delete all items in the list पाता है, जो इस तरह के

from functools import partial 
from operator import ne 
a = filter(partial(ne, [1, 1]), a) 
+0

'फ़िल्टर ([1,1] .__ ne__, ए) के साथ क्या गलत है? – tzot

+0

@ ΤΖΩΤΖΙΟΥ यह 'सूची' के लिए काम करता है, लेकिन' __ne__' 'int' या Python 2.x में कुछ अन्य प्रकारों पर एक विधि के रूप में मौजूद नहीं है। यह पायथन 3.x में तय किया गया है, लेकिन स्थिरता के लिए ... – ephemient

1
filter([1,1].__ne__,a) 
+0

मैं 'functools.partial (operator.ne, [1,1])' पसंद करता हूं, क्योंकि (कम से कम पायथन 2.x) अन्य प्रकार (' int', उदाहरण के लिए) सभी के पास '__ne__' नहीं है। ऐसा लगता है कि पाइथन 3 में तय किया गया है, हालांकि: सभी प्रकार 'ऑब्जेक्ट' से प्राप्त होते हैं, जिनमें '__ne__' होता है। – ephemient

0

शुद्ध अजगर कोई मॉड्यूल संस्करण, या कोई सूची कंप्यूटर अनुप्रयोग संस्करण के रूप में जवाहरात भी शामिल है (सरल समझने के लिए?)

>>> x = [1, 1, 1, 1, 1, 1, 2, 3, 2] 
>>> for item in xrange(x.count(1)): 
...  x.remove(1) 
... 
>>> 
>>> x 
[2, 3, 2] 

को डीफ़ में आसानी से बनाया जा सकता है

def removeThis(li,this): 
    for item in xrange(li.count(this)): 
      li.remove(this) 
    return li 
4

यहाँ एलेक्स मार्टेली के जवाब देने के लिए एक आसान विकल्प है:

a = [x for x in a if x != [1,1]] 
+0

यह अलग-अलग व्यवहार करता है - यह चर के मान को सेट करेगा लेकिन ऑब्जेक्ट को संशोधित नहीं करेगा। ऐसा लगता है कि यह काम करता है, लेकिन सूची को संशोधित नहीं करता है - बल्कि यह इसे बदल देता है। पुरानी सूची का उपयोग करने वाली कुछ भी अपडेट नहीं मिलेगी। – wizzwizz4

संबंधित मुद्दे