我试图使一个函数以iterable作为参数,并返回给定的iterable列表,但没有彼此相邻的值。
例如my_function("1112334512")
将返回["1", "2", "3", "4", "5", "1", "2"]
。
我不希望它删除可迭代对象中的重复值,我希望它删除其旁边具有相同值的值。 (例如,"AAABA"
的最终结果将是"ABA"
)
def my_function(iterable):
iterable_1 = []
for item in iterable:
iterable_1.append(item)
count = 0
for item in iterable_1:
# Tempoary count = count + 1
if iterable_1[count] == iterable_1[count + 1]:
iterable_1.pop(count)
else:
count += 1
return iterable_1
我的问题是,当我认为这样做终于完成时,运行my_function("AAAABBBCCDAABBB")
的结果返回了:['A', 'B', 'C', 'D', 'A', 'A', 'B', 'B', 'B']
,从理论上讲,它对D都做了正确的处理,而我认为for循环结束了。
我的问题是为什么?如果不是循环,那是什么?
答案 0 :(得分:5)
对我来说,您的方法似乎过于复杂。怎么样
def my_function(iterable):
result = []
for e in iterable:
if not result or result[-1] != e:
result.append(e)
return result
答案 1 :(得分:0)
您的代码应该是这样的,因为在您弹出一个值后iterable_1发生了变化。
def my_function(iterable):
iterable_1 = []
for item in iterable:
iterable_1.append(item)
count = 0
length = len(iterable_1)
for item in range(length):
try:
if iterable_1[count] == iterable_1[count + 1]:
iterable_1.pop(count)
else:
count += 1
except IndexError:
pass
return iterable_1