tags:

views:

96

answers:

6

I have this code:

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','*')`  

but the result is:

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

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

What should I do so the changes will last?

A: 

search for the function replace:

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

Return a copy of the string with all occurrences of substring old replaced by new. If the optional argument count is given, only the first count occurrences are replaced.

noinflection
+2  A: 

This isn't about the list. Python strings are immutable:

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

You're replacing 'a' with '*' and then throwing away the result.

Try something like:

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

This would work:

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

Or even simpler:

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

Which gives you a=[['b','c'],['f','c'],['c','d']].

Note: See the documentation on remove() for lists here.

kchau
+2  A: 

If you want to remove all occurrences of 'a' from all nested sublists, you could do:

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

if you want to replace them with asterisk:

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

You really want to replace the element in the nested list, like so:

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] = '*'

With the result:

a = [['*', 'b', 'c'], ['*', 'f', 'c'], ['*', 'c', 'd']]
Ryan
A: 
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']]
unutbu