发现该代码段中的控件从未到达内部while循环以删除重复的数字
{{1}}
答案 0 :(得分:1)
您的代码未使j
从i+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()
将数据从字典转换回列表。然后,在最后一行,我们打印出修改后的列表。
另一种选择是使用set
。
Sets
用于在Python中存储唯一项的集合。与lists
不同,sets
无法存储重复值。
我们可以将列表转换为集合,以删除重复的项目。
numbers=[1,6,6,7]
final_numbers = list(set(numbers))
print(final_numbers)
答案 2 :(得分:0)
之所以无法达到,是因为j
和i
从0值开始,并且在内部while循环中,条件是j in range(i+1, k)
,这意味着range(1, 4)
和{{1} }为0 in range(1, 4)
。无论如何,您应该避免使用False
和j
作为计数器,而应使用i
循环。
但是解决方案更容易,并且不需要遍历列表,如果要删除重复的值,可以执行以下操作:
for
结果是:numbers = [1, 6, 6, 7]
print(list(set(numbers)))