我对Python有点陌生,我四处看看,但没有找到满意的答案。我正在做一些练习问题,我想做一个方法,去除列表中的重复值。到目前为止,这是我的代码:
def noDouble(nums):
for x in xrange(len(nums) - 2):
if nums[x] == nums[x + 1]:
nums.pop(x)
x -= 1
return nums
我希望发生的是,如果有一个重复,弹出其中一个副本,然后再次移动(这样,如果有3个相同数量的实例,它将通过“倒带”来删除所有这些实例)。在
我正在寻找一个解释为什么我的代码不能像一个解释的解决方案,我真的非常感谢任何和所有的帮助。谢谢。在
因为
for
不计算数字;它遍历一个序列。每次循环体执行时,x
被设置为xrange
产生的下一个值。for
语句不关心循环末尾的x
是什么。在无论如何,你真的不应该在循环中修改列表。更简单的方法是建立一个新的列表:
当然,真正的消除重复的简单方法是
list(set(foo))
。但这将删除所有重复项,而不仅仅是相邻项,而且可能还会破坏项目顺序。在通常情况下,你不想在循环中打破循环。出于类似的原因,当你砍树的时候,你不想看到你坐在上面的树枝:-)
与嵌套循环相比,更安全的方法是在一个循环中构建一组操作,然后将该组传递给第二个循环(每个循环一级深)。在
{1{I>循环中的{I}与下一个循环中的循环}不一样,它实际上是一个循环。因此,减少
x
不会产生添加更多循环迭代的效果,因为它将被强制重置。在会屈服的
^{pr2}$编辑:这里有一个你正在尝试做的事情的可能性,尽管接受的答案对于你的特定用例来说更容易。使用
while
代替for
:尽管由于您访问列表元素的方式,此代码仍可能失败,并出现
IndexError
。但是,这仍然是添加额外迭代的方式。在相关问题 更多 >
编程相关推荐