web-dev-qa-db-fra.com

Supprimer Tuple de la liste des tuples si certaines conditions sont remplies

J'ai une liste de tuples qui ressemble à ceci;

ListTuples = [(100, 'AAA'), (80, 'BBB'), (20, 'CCC'), (40, 'DDD')]

Je veux supprimer les nuplets lorsque le premier élément du tuple est inférieur à 50. La liste de sortie ressemblera à ceci:

OutputList = [(100, 'AAA'), (80, 'BBB')]

Comment cela peut-il être fait en python?

Merci beaucoup pour votre aide.

12
user781486

Vous pouvez facilement le faire comme:

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

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

Cela crée simplement une nouvelle liste de n-uplets avec uniquement les n-uplets dont le premier élément est supérieur ou égal à 50. Même résultat, mais l'approche est différente. Au lieu de supprimer les nuplets non valides, vous acceptez les valables.

34
sshashank124

Vous pouvez aussi faire:

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

Extrait de code permettant de chronométrer les solutions proposées par sshashank124 et 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 solution filter () intégrée est plus rapide pour cet exemple.

1
Peter Smit

Essaye ça, 

>>> 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')]
>>>
1

Nous pouvons faire cela avec un compteur simple et une nouvelle liste:

   new = []

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

sortie: 

[(100, 'AAA') , (80, 'BBB')]
1
keyvan vafaee