我有这段代码:
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']]
我该怎么做才能让这些变化持续下去?
答案 0 :(得分:4)
这与列表无关。 Python字符串是不可变的:
> a = 'x'
> a.replace('x', 'bye')
> a
'x'
你用'*'替换'a'然后丢掉结果。
尝试类似:
for i,value in enumerate(mylist):
mylist[i] = value.replace('x', 'y')
答案 1 :(得分:4)
如果要从所有嵌套的子列表中删除所有出现的'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']]
答案 2 :(得分: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']]
答案 3 :(得分:0)
搜索功能replace:
str.replace(old, new[, count])
返回字符串的副本,其中所有出现的substring old都替换为new。如果给出了可选参数count,则只有 第一次计数的事件被替换。
答案 4 :(得分:0)
这样可行:
a=[['a','b','c'],['a','f','c'],['a','c','d']]
for x in a:
for y in x:
if y == 'a':
x.remove(y)
甚至更简单:
y = 'a'
a=[['a','b','c'],['a','f','c'],['a','c','d']]
for x in a:
x.remove(y)
为您提供a=[['b','c'],['f','c'],['c','d']]
。
注意:有关列表here的信息,请参阅remove()文档。
答案 5 :(得分: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']]