For循环意外结果

时间:2020-04-05 12:09:06

标签: python

我试图使一个函数以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循环结束了。

我的问题是为什么?如果不是循环,那是什么?

2 个答案:

答案 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