2012-10-23 21 views
5

devo togliere tutti i valori specifici da array (se presente), in modo che io scrivo:Rimuovere tutti i valore specifico da serie

while value_to_remove in my_array: 
    my_array.remove(value_to_remove) 

C'è modo più divinatorio per fare questo, per un solo comando?

risposta

8

Si può provare:

filter (lambda a: a != value_to_remove, my_array)

Esempio:

>>> my_array = ["abc", "def", "xyz", "abc", "pop", "abc"] 
>>> filter (lambda a: a != "abc", my_array) 
['def', 'xyz', 'pop'] 
+1

questo sembra il migliore. L'unica avvertenza è che se specificamente vuole eseguire una modifica sul posto se l'elenco esistente, nel qual caso viene eseguita un'allocazione aggiuntiva rispetto al ciclo nella sua domanda. –

+0

Grazie. Suppongo che il filtro sia molto più veloce, quindi la mia variante iniziale :) – RaSergiy

+0

'filter + lambda' è esattamente come non si deve fare cose in python. GvR: "il filtro (P, S) è quasi sempre scritto più chiaro come [x per x in S se P (x)]" – georg

3
clean_array = [element for element in my_array if value_to_remove != element] 

my_array = ('a','b','a','c') 
value_to_remove = 'a' 
>>> clean_array = [element for element in my_array if value_to_remove != element] 
>>> clean_array 
['b', 'c'] 
2

Uso itertools.ifilter:

import itertools 

my_array = list(itertools.ifilter(lambda x: x != value_to_remove, my_array)) 
+1

Quali benefici si ottengono con 'ifilter' qui? Se si inserisce nuovamente il risultato in una lista, un "filtro" dritto sembra migliore. –

+0

L'elenco è solo per ilustration. Forse l'OP può fare uso di un generatore. –

1

Da non perdere che v'è un ex mamente modo efficiente come segue:

import numpy as Numpy 

a = Numpy.array([1,7,3,4,4,6,3,8,7,0,8]) 
b = Numpy.array(['1','7','3','4','4','6','3','8','7','0','8']) 
c = Numpy.array([0.1,9.8,-0.4,0.0,9.8,13.7]) 
d = Numpy.array(['one','three','five','four','three']) 

print a 
print a[a!=3] 

print b 
print b[b!='3'] 

print c 
print c[c!=9.8] 

print d 
print d[d!='three'] 

e si ottiene:

>>> 
[1 7 3 4 4 6 3 8 7 0 8] 
[1 7 4 4 6 8 7 0 8] 
['1' '7' '3' '4' '4' '6' '3' '8' '7' '0' '8'] 
['1' '7' '4' '4' '6' '8' '7' '0' '8'] 
[ 0.1 9.8 -0.4 0. 9.8 13.7] 
[ 0.1 -0.4 0. 13.7] 
['one' 'three' 'five' 'four' 'three'] 
['one' 'five' 'four'] 
Problemi correlati