web-dev-qa-db-fra.com

Comment supprimer le dernier caractère de chaque chaîne d'une liste de chaînes

J'ai les chaînes '80010', '80030', '80050' dans une liste, comme dans 

test = ['80010','80030','80050']

Comment puis-je supprimer le tout dernier caractère (dans ce cas, le tout dernier chiffre de chaque chaîne qui est un 0), afin de pouvoir me retrouver avec une autre liste ne contenant que les quatre premiers chiffres/caractères de chaque chaîne? Alors finissez avec quelque chose comme 

newtest = ['8001', '8003', '8005']

Je connais très bien Python, mais j’ai essayé d’utiliser des instructions if-else, d’ajouter, d’indexer [: -1], etc., mais rien ne semble fonctionner si je ne supprime pas tous mes autres zéros. Merci beaucoup!

9
spartmar
test = ["80010","80030","80050"]
newtest = [x[:-1] for x in test]

Le nouveau test contiendra le résultat ["8001","8003","8005"].

[x[:-1] for x in test] crée une nouvelle liste (à l'aide de liste comprehension ) en passant en boucle chaque élément de test et en mettant une version modifiée dans newtest. Le x[:-1] signifie de prendre tout dans la valeur de chaîne x jusqu'au dernier élément, sans l'inclure.

12
Matthew

Vous n'êtes pas si loin. Utiliser la notation de tranche [: -1] est la bonne approche. Il suffit de le combiner avec une compréhension de liste:

>>> test = ['80010','80030','80050']
>>> [x[:-1] for x in test]
['8001', '8003', '8005']

somestring[:-1] vous donne tout, du caractère en position 0 (inclus) au dernier caractère (exclusif).

6
timgeb

Juste pour montrer une solution légèrement différente de la compréhension, étant donné que d’autres réponses ont déjà expliqué le découpage en tranches, j’examine simplement la méthode.

Avec la fonction map.

test = ['80010','80030','80050']
print map(lambda x: x[:-1],test)
# ['8001', '8003', '8005']

Pour plus d'informations sur cette solution, veuillez lire la brève explication que j'ai faite dans une autre question similaire.

Convertir une liste en une séquence de triples de chaînes

1
Rockybilly

En python, la solution @Matthew est parfaite. Mais si en effet vous êtes un débutant dans le codage en général, je dois recommander ceci, moins élégant certes mais le seul moyen dans de nombreux autres scénarios:

#variables declaration
test = ['80010','80030','80050'] 
lenght = len(test)                 # for reading and writing sakes, len(A): lenght of A
newtest = [None] * lenght          # newtest = [none, none, none], go look up empty array creation
strLen = 0                         # temporary storage

#adding in newtest every element of test but spliced
for i in range(0, lenght):         # for loop
    str = test[i]                  # get n th element of test
    strLen = len (str)             # for reading sake, the lenght of string that will be spliced
    newtest[i] = str[0:strLen - 1] # n th element of newtest is the spliced n th element from test

#show the results
print (newtest)                    # ['8001','8003','8005']

ps: ce script, bien que n'étant pas le meilleur, fonctionne en python! Bonne chance à tout programmeur newcommer.

0
NRagot