2014-04-09 9 views

risposta

19

Si può facilmente farlo come:

out_tup = [i for i in in_tup if i[0] >= 50] 

[Out]: [(100, 'AAA'), (80, 'BBB')] 

Questo crea semplicemente una nuova lista di tuple con i soli tuple il cui primo elemento è maggiore o uguale a 50. Stesso risultato, ma l'approccio è diverso. Invece di rimuovere tuple non valide, si accettano quelle valide.

+0

codice molto ordinato in python. Grazie! – user781486

+0

@ user3293156, Se la mia risposta fosse stata utile, ti dispiacerebbe accettarla? Grazie – sshashank124

+0

Ovviamente. Ho provato ad accettare più volte, ma devo aspettare altri 5 minuti prima che la mia accettazione possa essere accettata da Stack Overflow. La tua risposta è arrivata troppo velocemente :) Altri 5 minuti in più. – user781486

5

È anche possibile fare:

>>> OutputList = filter(ListTuples, lambda x: x[0] >= 50) 
>>> OutputList 
[(100, 'AAA'), (80, 'BBB')] 
+0

Posso chiedere se utilizzare il filtro e lambda è più lento della risposta fornita da sshashank124? – user781486

+0

@ user3293156 generalmente 'filter' è leggermente più veloce in quanto è una funzione incorporata. –

+0

@AlexThornton Solo quando viene utilizzato con funzioni integrate, con lambda è lento. –

1

Prova questa,

>>> ListTuples = [(100, 'AAA'), (80, 'BBB'), (20, 'CCC'), (40, 'DDD')] 
>>> new=[] 
>>> for i in ListTuples: 
    if i[0]>50: 
     new.append(i) 


>>> new 
[(100, 'AAA'), (80, 'BBB')] 
>>> 
+0

Questo codice sembra familiare. Sembra la sintassi del linguaggio C. Ma l'esecuzione è più lenta del codice pythonic fornito da Alex Thornton e sshashank124? – user781486

1

frammento di codice per la temporizzazione delle soluzioni fornite dal sshashank124 e Alex Thornton:

ListTuples = [(100, 'AAA'), (80, 'BBB'), (20, 'CCC'), (40, 'DDD')] 
import timeit 
timeit.timeit('[i for i in ListTuples if i[0] >= 50]', globals=globals(), number=1000000) 
>>> 0.6041104920150246 

timeit.timeit('filter(lambda x: x[0] >= 50, ListTuples)', globals=globals(), number=1000000) 
>>> 0.3009479799948167 

La build-in la soluzione filter() è più veloce per questo esempio.

1

possiamo farlo con un semplice contatore e un nuovo elenco:

new = [] 

    for i in ListTuples: 
     for j in i: 
      if (counter % 2 == 0): 
       if (j > 50): 
        new.append(i) 
      counter = counter +1 

uscita:

[(100, 'AAA') , (80, 'BBB')] 
Problemi correlati