2014-04-09 27 views

Odpowiedz

19

Można łatwo zrobić jak:

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

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

To po prostu tworzy nową listę krotek z tylko tych krotek, których pierwszym elementem jest większa lub równa 50. sam rezultat, jednak podejście jest inne. Zamiast usuwać nieprawidłowe krotki, akceptujesz prawidłowe.

+0

Bardzo czysty kod w Pythonie. Dzięki! – user781486

+0

@ user3293156. Jeśli moja odpowiedź byłaby pomocna, czy mógłbyś ją zaakceptować? Dziękuję – sshashank124

+0

Oczywiście. Próbowałem zaakceptować kilka razy, ale muszę czekać jeszcze 5 minut, zanim moja akceptacja zostanie zaakceptowana przez Stack Overflow. Twoja odpowiedź nadeszła zbyt szybko :) Kolejne 5 minut więcej. – user781486

5

Można również zrobić:

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

Czy mogę zapytać, czy użycie filtru i lambda jest wolniejsze niż odpowiedź dostarczona przez sshashank124? – user781486

+0

@ user3293156 ogólnie 'filter' jest nieco szybszy, ponieważ jest wbudowaną funkcją. –

+0

@AlexThornton Tylko w połączeniu z wbudowanymi funkcjami, z lambdasami jest wolny. –

1

Spróbuj tego,

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

Ten kod wygląda znajomo. Wygląda jak składnia języka C. Ale czy wykonanie jest wolniejsze od pythonowego kodu dostarczonego przez Alexa Thorntona i sshashank124? – user781486

1

fragment kodu dla taktowania rozwiązań podanych przez sshashank124 i 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 

Build-in W tym przykładzie rozwiązanie filter() jest szybsze.

1

możemy zrobić to z prostego licznika i nowej listy:

new = [] 

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

wyjściowa:

[(100, 'AAA') , (80, 'BBB')] 
Powiązane problemy