更改列表中的值 - python

时间:2010-05-12 17:41:05

标签: python list

我有这段代码:

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 个答案:

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