2017-05-15 2 views
-1

J'ai une liste imbriquée et dans chaque liste le premier élément est une chaîne qui se termine par .abc. Je souhaite supprimer tous les caractères .abc de ma liste imbriquée.supprimer les caractères des premiers éléments dans la liste des listes

Voici ce que j'ai:

x = [['car.abc', 1, 2], ['ship.abc', 3, 4]] 

et je voudrais à ma liste imbriquée être les suivants:

x = [['car', 1, 2], ['ship', 3, 4]] 

Comment puis-je y parvenir?

Répondre

1

Utilisation d'une boucle simple.

x = [['car.abc', 1, 2], ['ship.abc', 3, 4]] 
for i in x: 
    i[0] = i[0].rsplit(".", 1)[0] 
print(x) 
+0

utilisation peut-être mieux 'rsplit ("", 1)' dans le cas où il y a une autre '.' l'intérieur de la chaîne. –

+0

Mis à jour @tobias_k :) – itzMEonTV

1

Utilisation d'expressions régulières imbriquées et la compréhension de la liste:

>>> import re 

>>> [[re.sub(r'.abc$', '', e) if isinstance(e, basestring) else e for e in l] for l in x] 
[['car', 1, 2], ['ship', 3, 4]] 
  • isinstance(e, basestring) vérifie si e est une chaîne (voir this question).

  • Pour une chaîne e, re.sub(r'.abc$', '', e) remplace la partie que vous avez spécifié

  • Sinon e est intacte

  • Le précédent se produit pour tout élément e dans une liste l, pour chaque l dans x.

+0

@tobias_k Bien, merci. Utilisera 're'. –

+0

@tobias_k Merci! fixé. –

0

Check online demo

x = [['car.abc', 1, 2], ['ship.abc', 3, 4]] 
new_x=[] 
for lst in x: 
    temp_lst=[] 
    for item in lst: 
    if(str(item)[-4:] == '.abc'): 
     item = str(item)[:-4] 
    temp_lst.append(item) 
    new_x.append(temp_lst) 

print(new_x)