我试图理解创建可以替换字符串列表中重复字符串的函数的过程。例如,我要转换此列表
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)之后直接出现时,这才对我有帮助。
不幸的是,这是我对问题的了解。如果有人可以为我提供有关此程序的说明,我将不胜感激。
答案 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']