5

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

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

针对我的具体情况。我有一个这样的列表:

appl =  ['1', 'a', 'a', '2', 'a']

我只想用一个空格替换“a”的“单个未知”实例(它保持“a”曾经所在的位置)。我不确定如何只为一个角色做这件事。任何人都可以帮忙吗?提前致谢。

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

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

track  [2] =   ["|","@","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"]

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

4

5 回答 5

3

您可以通过遍历列表并存储其元素为的索引来简单地找到第二次出现的索引,'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']
于 2012-11-22T23:14:31.593 回答
2

您可以使用 index 以及循环来实现此目标。这是它的一个小功能:

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

利用:

replace_element(appl, 'a', 2, ' ')

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

ValueError: 'a' is not in list
于 2012-11-22T23:12:32.660 回答
1
appl = ['1', 'a', 'a', '2', 'a']
a_indices = [i for i, x in enumerate(appl) if x == 'a']

if len(a_indices) > 1:
    appl[a_indices[1]] = ' '
于 2012-11-22T23:12:40.810 回答
1

首先,找到第一次出现的值:

>>> 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']
于 2012-11-22T23:19:44.043 回答
0

"|"您的列表(带有, )似乎"@"很短,并且"@"始终存在,只是在不同的位置。在这种情况下,您可以在一行中替换列表中第一次出现的"@"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
于 2012-11-23T00:47:43.807 回答