我需要分割这个字符串:
"We shall win 100 dollars in the next 2 years"
并返回一个带有整数和字符串([100,2],[We,shall,win,dollars,in,the,next,years])
列表的元组。
到目前为止我的尝试:
lst_int =[]
lst_str =[]
tup_com =(lst_int,lst_str)
words = input_string.split()
for i in words:
if i == int():
lst_int.append(i)
elif i != int():
lst_str.append(i)
return tup_com
答案 0 :(得分:1)
你可以用简单的正则表达式
来做import re
s = "We shall win 100 dollars in the next 2 years"
t = (re.findall("[0-9]+",s),re.findall("[a-zA-Z]+",s))
答案 1 :(得分:0)
您可以使用以下几种方法来实现:
1)检查isdigit
:
sentence = "We shall win 100 dollars in the next 2 years"
str_list=[]
int_list=[]
for word in sentence.split():
if word.isdigit():
int_list.append(int(word)) # cast at the same time
else:
str_list.append(word)
问题:如果数字为负数,则必须检查包含减号的数字,空格字符仍被视为有效数字,这使isdigit
更复杂。这可能会导致你使用正则表达式,这是一个更复杂的,并使用正则表达式打开整数解析的盒子...(我甚至没有提到浮点数)
2)依赖python整数解析:
str_list=[]
int_list=[]
for word in sentence.split():
try:
int_list.append(int(word))
except ValueError:
str_list.append(word)
由于异常处理,速度稍慢,但在所有情况下都能正常工作,甚至可以推广用于浮点数。
答案 2 :(得分:0)
如果稍微调整一下你的情况就可以实现。 i == int()
并没有真正按照您的想法行事; int()
会返回0
,因此您基本上会不断检查i == 0
是否始终为False
(导致所有内容都附加到lst_str
。< / p>
相反,请在str.isdigit
循环中使用for
,如下所示:
if i.isdigit():
lst_int.append(i)
else:
lst_str.append(i)
str.isdigit
遍历您提供的字符串中的字符,如果它们都是数字(并且字符串是非空的),则进行评估。
然后,tup_com
会导致:
(['100', '2'], ['We', 'shall', 'win', 'dollars', 'in', 'the', 'next', 'years'])
顺便说一句,你在这里不需要tup_com
,只需返回用逗号分隔的列表,然后创建一个包含它们的元组。
那是:
return lst_int, lst_str