我有一个函数来识别和分离给定字符串中的单词和数字,但是,我的iterable(i)不会跳过它应该的位置,并且我有多余的结果:
abcde 123 (
对于字符串['abcde', 'bcde', 'cde', 'de', 'e', '123', '23', '3', '(']
,我收到此回复:
['abcde', '123','(']
我怎样才能得到:
QWidget
答案 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