2010-05-12 9 views
3

Je possède ce code:modification des valeurs dans une liste - python

a=[['a','b','c'],['a','f','c'],['a','c','d']]  
for x in a:  
    for y in x:  
     if 'a' in x:  
      x.replace('a','*')` 

mais le résultat est:

a=[['a','b','c'],['a','f','c'],['a','c','d']] 

et bot a=[['b','c'],['f','c'],['c','d']]

Que dois-je faire pour que les changements vont durer ?

+0

En outre, votre code est erroné. Vous n'obtiendrez aucun résultat, car il soulève 'AttributeError' – SilentGhost

+0

Qu'essayez-vous d'accomplir? – SilentGhost

Répondre

0

Rechercher la fonction replace:

str.replace(old, new[, count]) 

Retour une copie de la chaîne avec toutes les occurrences de sous-chaîne ancienne remplacées par de nouvelles. Si le nombre d'arguments facultatif est indiqué, seules les occurrences du premier nombre sont remplacées.

4

Il ne s'agit pas de la liste. chaînes Python sont immuables:

> a = 'x' 
> a.replace('x', 'bye') 
> a 
'x' 

Vous remplacez « a » par « * » puis jeter le résultat.

Essayez quelque chose comme:

for i,value in enumerate(mylist): 
    mylist[i] = value.replace('x', 'y') 
0

Cela fonctionnerait:

a=[['a','b','c'],['a','f','c'],['a','c','d']] 
for x in a:  
    for y in x:  
     if y == 'a': 
      x.remove(y) 

Ou encore plus simple:

y = 'a' 
a=[['a','b','c'],['a','f','c'],['a','c','d']] 
for x in a:  
    x.remove(y) 

Ce qui vous donne a=[['b','c'],['f','c'],['c','d']].

Remarque: Voir la documentation sur remove() pour les listes here.

4

Si vous souhaitez supprimer toutes les occurrences de 'a' de tous les sous-listes imbriquées, vous pouvez faire:

>>> [[i for i in x if i != 'a'] for x in a] 
[['b', 'c'], ['f', 'c'], ['c', 'd']] 

si vous voulez les remplacer par un astérisque:

>>> [[i if i != 'a' else '*' for i in x] for x in a] 
[['*', 'b', 'c'], ['*', 'f', 'c'], ['*', 'c', 'd']] 
1

Vous voulez vraiment remplacer l'élément dans la liste imbriquée, comme ceci:

a=[['a','b','c'],['a','f','c'],['a','c','d']]  
for row in a: 
    for ix, char in enumerate(row): 
     if char == 'a': 
      row[ix] = '*' 

Avec le résultat t:

a = [['*', 'b', 'c'], ['*', 'f', 'c'], ['*', 'c', 'd']] 
0
a=[['a','b','c'],['a','f','c'],['a','c','d']] 
b=[[subelt.replace('a','*') for subelt in elt] for elt in a] 
print(b) 

# [['*', 'b', 'c'], ['*', 'f', 'c'], ['*', 'c', 'd']] 
Questions connexes