Python中的条件循环

4
list=['a','a','x','c','e','e','f','f','f']

i=0
count = 0

while count < len(list)-2:
    if list[i] == list[i+1]:
        if list [i+1] != list [i+2]:
            print list[i]
            i+=1
            count +=1
        else:print "no"
    else:   
        i +=1
        count += 1

我得到了:

    else:print "no"
   ^
 IndentationError: unexpected indent

我想只打印与以下元素匹配的元素,但不包括其后面的元素。我是 Python 的新手,不确定为什么这样做不起作用。


你是否粘贴了你的代码?因为这段代码没有任何错误。 - karthikr
4
请确保不要将制表符与空格混合使用。同时,将ifelse放置在相同的缩进级别。另外,请勿使用list作为变量名,因为它是一种内置类型。 - karthikr
2
避免使用 list,因为它是一个内部定义的函数(覆盖它会导致问题)。 - Makoto
1
此外,使用for循环而不是while循环将使所有这些变得更容易。 - Raymond Hettinger
@Makoto,这有三个错误:list是内置类型而不是函数;您没有重写它而是在变量范围内简单地隐藏了名称;除非您还想在同一作用域中引用该类型,否则它不会直接引起问题。使用list作为变量名的实际问题是它是一个非常不具描述性的名称,如果读者看不到它被隐藏,就可能会使阅读代码的人感到困惑,并且它会阻止Python和像Pyflakes这样的工具警告您未定义的变量,也可能使查找错误更加困难。 - l4mpi
2个回答

7

这是修复后的代码(在else子句之后添加了count += 1以确保它终止):

list=['a','a','x','c','e','e','f','f','f']

i=0
count = 0

while count < len(list)-2:
    if list[i] == list[i+1]:
        if list [i+1] != list [i+2]:
            print list[i]
            i+=1
            count +=1
        else:
            print "no"
            count += 1
    else:   
        i +=1
        count += 1

使用itertools的高级解决方案更为紧凑,更易于正确实现。
from itertools import groupby

data = ['a','a','x','c','e','e','f','f','f']
for k, g in groupby(data):
    if len(list(g)) > 1:
        print k

2
这也说明了为什么你不应该将 list 作为变量名。 - jamylak
似乎itertools版本捕获了更多的条件(例如,while循环不打印'f')。此外,如果将列表修改为同时包含三个'a',原始循环不会打印任何内容(i从未递增)。 - Bear
哇,itertools 是一个很好的解决方案。只需将 ">" 替换为 "==" 就可以得到我想要的结果。谢谢! - whatever

2
代码在我这里可以正常运行(尽管会陷入循环)。请确保您没有混用制表符和空格。

我认为陷入循环是某种错误。 - Makoto
1
循环与问题无关,我已经指出了。手头的问题是关于意外缩进的。 - cogsmos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接