为什么这些循环输出不同?

时间:2021-02-18 16:24:45

标签: python python-3.x loops

我正在处理一项需要对字符串中的重复字母进行排序和删除的任务。我最终让这个函数做我想做的事,但运气不好。我不知道为什么这些代码行会产生不同的输出。有人能帮我理解吗?

def format_string(string1):
    sorted1 = sorted(string1)
    print(sorted1)

    i = 0
    while i < len(sorted1) - 1:
        if sorted1[i] == sorted1[i + 1]:
            del sorted1[i + 1]
        else:
            i += 1
    return sorted1


print(format_string("aretheyhere"))
<块引用>

['a', 'e', 'e', 'e', 'e', 'h', 'h', 'r', 'r', 't', 'y'] <块引用>

['a', 'e', 'h', 'r', 't', 'y']

#这就是我想要的。但这些看似相似的线条却没有。

def format_string(string1):
    sorted1 = sorted(string1)
    print(sorted1)

    i = 0
    j = i + 1
    while i < len(sorted1) - 1:
        if sorted1[i] == sorted1[j]:
            del sorted1[j]
        else:
            i += 1
    return sorted1


print(format_string("aretheyhere"))
<块引用>

['a', 'e', 'e', 'e', 'e', 'h', 'h', 'r', 'r', 't', 'y'] <块引用>

['a', 'y']

def format_string(string1):
    sorted1 = sorted(string1)
    print(sorted1)

    i = 0
    while i < len(sorted1) - 1:
        if sorted1[i] == sorted1[i + 1]:
            del sorted1[i + 1]
        i += 1
    return sorted1


print(format_string("aretheyhere"))
<块引用>

['a', 'e', 'e', 'e', 'e', 'h', 'h', 'r', 'r', 't', 'y'] <块引用>

['a', 'e', 'e', 'h', 'r', 't', 'y']

这里改变输出的关键区别是什么?

1 个答案:

答案 0 :(得分:0)

变量 j 不会增加,因为它没有在 while 循环内更新,即在将 i 的值设置为 j 后更改 i+1 的值不改变 j 的值。例如,此函数将给出与第一个相同的结果,因为 j 的值在 while 循环内更新:

def format_string(string1):
    sorted1 = sorted(string1)
    print(sorted1)

    i = 0
    while i < len(sorted1) - 1:
        j = i + 1
        if sorted1[i] == sorted1[j]:
            del sorted1[j]
        else:
            i += 1
    return sorted1


print(format_string("aretheyhere"))