在列表中更改值 - python

4 投票
6 回答
52772 浏览
提问于 2025-04-15 22:38

我有这段代码:

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

撰写回答