【发布时间】:2015-09-23 08:01:56
【问题描述】:
我有一个函数可以从给定的字符串中识别和分离单词和数字,但是,我的 iterable(i) 没有跳过它应该跳过的地方,而且我得到了多余的结果:
SPACES = [' ', '\n', '\t', '\v', '\f', '\r']
OPERATORS = "%*/+-!^="
DIGITS = '0123456789'
LETTERS = '_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
PARENTHESIS = '()'
return_list = []
test=''
for i in range(len(list_a)):
print(i)
if i in SPACES:
print('space')
elif list_a[i] in OPERATORS:
return_list.append(list_a[i])
elif list_a[i] in DIGITS or list_a[i] == POINT:
while list_a[i] in DIGITS or list_a[i] == POINT:
test=test+list_a[i]
i+=1
return_list.append(test)
test=''
continue
elif list_a[i] in LETTERS:
while list_a[i] in LETTERS or list_a[i] in DIGITS:
test = test+list_a[i]
i+=1
return_list.append(test)
test=''
continue
elif list_a[i] in PARENTHESIS:
return_list.append(list_a[i])
return return_list
对于一个字符串abcde 123 (,我得到这个返回:
['abcde', 'bcde', 'cde', 'de', 'e', '123', '23', '3', '(']
我怎样才能得到:
['abcde', '123','(']
【问题讨论】:
-
i是一个整数,即你的计数器,而不是一个可迭代的。顺便说一句,要获得['abcde', '123','('],您可以使用list_a.split(),假设list_a是一个字符串 -
也许你应该给出完整的代码,包括
SPACESOPERATORS等。 -
我不能使用 split() 因为不是所有的元素都是分开的...
-
OK 然后使用正则表达式,不要重新发明轮子(除非是为了培训目的)
-
您可以将 split() 与任何字符一起使用:'1.2 + 5'.split('.') 返回 ['1', '2 + 5']