python替换列表中的项目

See*_*und 5 python replace list

嗨我的问题与很久以前某个用户的帖子有关:

在Python列表中查找并替换字符串值

对于我的具体情况.我有一个这样的列表:

appl =  ['1', 'a', 'a', '2', 'a']
Run Code Online (Sandbox Code Playgroud)

我想只用一个空的空格(它保存"a"的位置)来替换"a"的"单个未知"实例.我不确定如何只为一个角色做这件事.有人可以帮忙吗?提前致谢.

编辑:我应该提到我需要使用"索引"函数来首先找到"a",因为它是一个变化的变量.然后我需要代替字符的代码.

EDIT2:很多人都假设索引会是2,但我想指出的是该字符的索引是未知的.此外,"a"将在列表中出现约20次(将保留固定数字),但它们的位置将会发生变化.我想根据用户输入替换"a".这是我正在使用的实际列表:

track  [2] =   ["|","@","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"]
Run Code Online (Sandbox Code Playgroud)

@是一个charachter,| 是一个边界,""是一个空的空间.用户输入输入以选择向右移动的数量,并显示一个新图像,显示@的新位置,并将@的旧位置替换为空格.列表的长度保持不变.这是我的问题的背景.

Ser*_*lis 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
Run Code Online (Sandbox Code Playgroud)

使用:

replace_element(appl, 'a', 2, ' ')
Run Code Online (Sandbox Code Playgroud)

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

ValueError: 'a' is not in list
Run Code Online (Sandbox Code Playgroud)

  • 这是不对的 ``appl.index('a', 2)`` 意味着从位置 2 开始,而不是找到第二次出现。 (2认同)
  • `appl.index('a', 2) 表示查找 a 的第二个索引`。不,事实并非如此。这意味着搜索从字符 2 开始。 (2认同)