在列表中更改值 - 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','*')`
但是结果是:
a=[['a','b','c'],['a','f','c'],['a','c','d']]
还有变量 a=[['b','c'],['f','c'],['c','d']]
我该怎么做才能让这些更改保持有效呢?
6 个回答
1
你其实是想在这个嵌套列表中替换某个元素,像这样:
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] = '*'
最后得到的结果是:
a = [['*', 'b', 'c'], ['*', 'f', 'c'], ['*', 'c', 'd']]
4
这不是关于列表的事。Python中的字符串是不可变的:
> a = 'x'
> a.replace('x', 'bye')
> a
'x'
你是在用'*'替换'a',然后又把结果丢掉了。
试试下面这样的做法:
for i,value in enumerate(mylist):
mylist[i] = value.replace('x', 'y')
5
如果你想从所有嵌套的子列表中去掉所有的‘a’,你可以这样做:
>>> [[i for i in x if i != 'a'] for x in a]
[['b', 'c'], ['f', 'c'], ['c', 'd']]
如果你想把它们替换成星号(*):
>>> [[i if i != 'a' else '*' for i in x] for x in a]
[['*', 'b', 'c'], ['*', 'f', 'c'], ['*', 'c', 'd']]