J'ai une liste:
carac_list = ['21 25 5', '16 20 16', '16 20 12', '7 10 2', '2 3 1 ', '2 3 ', '']
actual = [item.split()[2] for item in carac_list]
print("Actual = " + str(actual))
Et je veux imprimer tous les trois éléments comme ceci:
['5', '16', '12', '2', '1', '0']
Mais le dernier élément provoque une liste d'index hors de portée en raison de la chaîne vide. Ce que je veux, c'est remplacer toutes les chaînes vides par un 0
Donc, le résultat que j'aimerais avoir est le suivant:
['5', '16', '12', '2', '1', '']
Je ne sais pas comment faire ça. Voici un extrait de ce que j'essaye de faire:
['21 25 5', '16 20 16', '16 20 12', '7 10 2', '2 3 1 ', '2 3 ', '']
3 Réponses :
>>> seq ['21 25 5', '16 20 16', '16 20 12', '7 10 2', '2 3 1 ', '2 3 ', ''] >>> [i[0] if i else '0' for i in (i.split()[2:] for i in seq)] ['5', '16', '12', '2', '1', '0', '0']
Merci, ça marche, ça m'a vraiment aidé!
Vous pouvez utiliser les expressions d'affectation / l'opérateur morse introduit dans Python3.8
['5', '16', '12', '2', '1', '0']
En dehors:
carac_list = ['21 25 5', '16 20 16', '16 20 12', '7 10 2', '2 3 1 ', '2 3 ', ''] actual = [y[2] if len(y) == 3 else '0' for item in carac_list if (y := item.split())] print(actual)
Similaire à certains autres mais avec un seul if et un seul for dans la compréhension de la liste, en utilisant l'opérateur Walrus dans Python 3.8+
carac_list = ['21 25 5', '16 20 16', '16 20 12', '7 10 2', '2 3 1 ', '2 3 ', ''] out = [y[2] if len(y := x.split()) >= 3 else "0" for x in carac_list] ['5', '16', '12', '2', '1', '0', '0']
pourquoi juste un 0 et pas deux - de
'2 3 'et de''?Oui, cela pourrait être deux 0, la dernière liste vide est quelque chose que je dois supprimer, mon idée est que si le troisième caractère est vide, les listes doivent le remplacer par un 0 ou deux.