python替换列表中的项

python替换列表中的项,python,list,replace,Python,List,Replace,您好,我的问题与很久以前某位用户在这里发布的帖子有关: 针对我的具体情况。我有这样一份清单: appl = ['1', 'a', 'a', '2', 'a'] 我只想将“a”的“单个未知”实例替换为一个空的空格(该空格保留“a”过去所在的位置)。我不知道如何做到这一点,只有一个字符。有人能帮忙吗?提前谢谢 编辑:我应该提到,我需要使用“index”函数首先定位“a”,因为它是一个不断变化的变量。然后我需要替换字符的代码 EDIT2:很多人都认为索引是2,但我想指出的是,这个角色的索引是未知

您好,我的问题与很久以前某位用户在这里发布的帖子有关:

针对我的具体情况。我有这样一份清单:

appl =  ['1', 'a', 'a', '2', 'a']
我只想将“a”的“单个未知”实例替换为一个空的空格(该空格保留“a”过去所在的位置)。我不知道如何做到这一点,只有一个字符。有人能帮忙吗?提前谢谢

编辑:我应该提到,我需要使用“index”函数首先定位“a”,因为它是一个不断变化的变量。然后我需要替换字符的代码

EDIT2:很多人都认为索引是2,但我想指出的是,这个角色的索引是未知的。此外,“a”将出现在列表中约20次(仍为固定数字),但其位置将发生变化。我想根据用户输入替换“a”。这是我正在处理的实际列表:

track  [2] =   ["|","@","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"]
@是字符,|是边框,“”是空白。
用户输入输入以选择@向右移动多少,将显示一个新图像,显示@的新位置,并用空格替换@的旧位置。列表的长度保持不变。这就是我问题的背景。

您可以使用索引和循环来实现这一目标。 下面是它的一个小功能:

def replace_element(li, ch, num, repl):
    last_found = 0
    for _ in range(num):
        last_found = li.index(ch, last_found+1)
    li[li.index(ch, last_found)] = repl
使用:

此方法特别好,因为当字符不在列表中时,它会抛出以下错误:

ValueError: 'a' is not in list

只需遍历列表并存储元素为
'a'
的索引,直到找到两个,即可找到第二次出现的索引:

>>> appl = ['1', 'a', 'a', '2', 'a']
>>> idxs = (i for i,c in enumerate(appl) if c == 'a')
>>> next(idxs)
0
>>> appl[next(idxs)] = ''
>>> appl
['1', 'a', '', '2', 'a']

首先,查找该值的第一个匹配项:

>>> appl = ['1', 'a', 'a', '2', 'a']
>>> first = appl.index('a')
>>> first
1
要查找第二个位置,请从第一个位置加上一个位置开始:

>>> second = appl.index('a', first+1)
>>> second
2
然后将该位置设置为所需的空间:

>>> appl[second] = ' '
>>> appl
['1', 'a', ' ', '2', 'a']
似乎您的列表(带有
“|”
“@”
)很短,
“@”
总是存在,只是在不同的位置。在这种情况下,您可以在一行中替换
appl
列表中第一个出现的
“@”

appl[appl.index("@")] = " "
如果列表较大且项目可能不存在:

i = next((i for i, x in enumerate(lst) if x == item), None)
if i is not None:
   lst[i] = replacement

这是不对的
appl.index('a',2)
表示从位置2开始,而不是查找第二个匹配项。
appl.index('a',2)表示查找a的第二个索引。不,没有。这意味着搜索从字符2开始。@phihag啊,对不起,大脑放屁,谢谢你的更正。这也是第二次出现吗?
appl[appl.index("@")] = " "
i = next((i for i, x in enumerate(lst) if x == item), None)
if i is not None:
   lst[i] = replacement