将列表中的重复值替换为'x'?

时间:2019-02-07 22:22:02

标签: python iteration

我试图理解创建可以替换字符串列表中重复字符串的函数的过程。例如,我要转换此列表

mylist = ['a', 'b', 'b', 'a', 'c', 'a']

对此

mylist = ['a', 'b', 'x', 'x', 'c', 'x']

最初,我知道我需要创建函数并遍历列表

def replace(foo):
    newlist= []
    for i in foo:
        if foo[i] == foo[i+1]:
            foo[i].replace('x')
    return foo

但是,我知道这有两个问题。首先是我得到一个错误提示

list indices must be integers or slices, not str

所以我相信我应该在此列表的范围内进行操作,但是我不确定如何实现它。另一个是只有重复的字母在我的迭代(i)之后直接出现时,这才对我有帮助。

不幸的是,这是我对问题的了解。如果有人可以为我提供有关此程序的说明,我将不胜感激。

4 个答案:

答案 0 :(得分:2)

浏览列表,并跟踪您在集合中看到的内容。将您之前在列表中看到的内容替换为“ x”:

mylist = ['a', 'b', 'b', 'a', 'c', 'a']

seen = set()
for i, e in enumerate(mylist):
    if e in seen:
        mylist[i] = 'x'
    else:
        seen.add(e)

print(mylist)
# ['a', 'b', 'x', 'x', 'c', 'x']

答案 1 :(得分:1)

简单的解决方案。

my_list = ['a', 'b', 'b', 'a', 'c', 'a']
new_list = []

for i in range(len(my_list)):
    if my_list[i] in new_list:
        new_list.append('x')
    else:
        new_list.append(my_list[i])
print(my_list)
print(new_list)

# output
#['a', 'b', 'b', 'a', 'c', 'a']
#['a', 'b', 'x', 'x', 'c', 'x']

答案 2 :(得分:0)

其他解决方案使用索引编制,这不是必需的。

很简单,您可以检查if的值是in新列表,else可以append x。如果要使用功能:

old = ['a', 'b', 'b', 'a', 'c']

def replace_dupes_with_x(l):
    tmp = list()
    for char in l:
        if char in tmp:
            tmp.append('x')
        else:
            tmp.append(char)

    return tmp

new = replace_dupes_with_x(old)

答案 3 :(得分:-1)

您可以使用以下解决方案:

from collections import defaultdict

mylist = ['a', 'b', 'b', 'a', 'c', 'a']
ret, appear = [], defaultdict(int)
for c in mylist:
     appear[c] += 1
     ret.append(c if appear[c] == 1 else 'x')

哪个会给你:

  

['a','b','x','x','c','x']