如何在Python中保留我的可迭代值?

时间:2015-09-23 08:01:56

标签: python loops iterator

我有一个函数来识别和分离给定字符串中的单词和数字,但是,我的iterable(i)不会跳过它应该的位置,并且我有多余的结果:

abcde 123 (

对于字符串['abcde', 'bcde', 'cde', 'de', 'e', '123', '23', '3', '('] ,我收到此回复:

['abcde', '123','(']

我怎样才能得到:

QWidget

2 个答案:

答案 0 :(得分:0)

while循环中i的更新不会影响for循环中的i值。 for循环遍历[0,1,2,...]。在第二次迭代开始时,不管i是什么值,它将被设置回for循环中预定义的第二个值(即1)。等等。 尝试用while循环替换第一个for循环。

答案 1 :(得分:0)

另一种方法是设置一个上下文变量,记录“光标”(即文本字符串中循环的位置)当前是在单词,数字还是两者之内。如果在单词或数字中,则下一个字符将添加到列表中的上一个项目,而不是作为新项目附加。

def parse_text(text):
    context = None
    r = []
    for ch in text:
        if ((context == 'number' and ch in DIGITS + POINT) or
            (context == 'word' and ch in LETTERS + DIGITS)):
            r[-1] += ch
            continue
        if ch in OPERATORS + PARENTHESIS + DIGITS + LETTERS:
            r.append(ch)
        context = None
        if ch in DIGITS:
            context = 'number'
        elif ch in LETTERS:
            context = 'word'
    return r