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