内部while循环未执行

时间:2020-07-16 02:40:54

标签: python while-loop

发现该代码段中的控件从未到达内部while循环以删除重复的数字

{{1}}

3 个答案:

答案 0 :(得分:1)

您的代码未使ji+1开始。相反,它从零开始,永不改变。内部循环永远不会运行,因为0超出了您要测试的范围。

尝试以下简单更改:

i=0
while i < k+1:
    j=i+1
    while j < k:
        if numbers[i] == numbers[j]:
            ...

主要变化是将j的初始化移到第一个while循环内,因此每次您进行初始化时它都会更新,并且永远不会以小于等于i的形式开始

我所做的其他更改远没有那么重要。我没有对i in range(...)循环条件使用j in range(...)while,而是进行了不等式测试。这与range成员资格测试的内容完全相同,但是避免了对不可能发生的事情的不必要的测试(例如j现在太小了)。它还使该循环看起来不太像for循环,该循环大量使用for i in range(...)语法(含义不同)。

您以后可能会遇到的另一个问题是,有些集合中有多组重复项,这是因为删除第j个元素的代码可能无法达到您的预期。调用numbers.remove(numbers[j])从列表中删除等于numbers[j] first 值,该值将成为索引i的值,而不是索引{ {1}}。要按索引删除列表项,您想使用j

答案 1 :(得分:0)

您可以使用dict.fromkeys()从Python列表中删除重复项。

numbers=[1,6,6,7]
final_numbers = list(dict.fromkeys(numbers))
print(final_numbers)

在此示例中,我们使用dict.fromkeys()方法从numbers变量创建字典。然后,我们使用list()将数据从字典转换回列表。然后,在最后一行,我们打印出修改后的列表。

另一种选择是使用setSets用于在Python中存储唯一项的集合。与lists不同,sets无法存储重复值。 我们可以将列表转换为集合,以删除重复的项目。

numbers=[1,6,6,7]
final_numbers = list(set(numbers))
print(final_numbers)

答案 2 :(得分:0)

之所以无法达到,是因为ji从0值开始,并且在内部while循环中,条件是j in range(i+1, k),这意味着range(1, 4)和{{1} }为0 in range(1, 4)。无论如何,您应该避免使用Falsej作为计数器,而应使用i循环。

但是解决方案更容易,并且不需要遍历列表,如果要删除重复的值,可以执行以下操作:

for

结果是:numbers = [1, 6, 6, 7] print(list(set(numbers)))