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.
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.
Vous pouvez aussi faire:
>>> OutputList = filter(ListTuples, lambda x: x[0] >= 50)
>>> OutputList
[(100, 'AAA'), (80, 'BBB')]
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.
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')]
>>>
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')]