有没有一种有效的方法来查找int和浮点数的字符串,而无需使用两个不同的列表理解
st = '2.00 00 DBEL 215 Frox Lyxo 2.000 2.00'
reg = r'\d+(?:\.\d*)?'
out = re.compile(reg).findall(st)
# output as ['2.00', '00', '215', '2.000', '2.00']
int_in_string = len([i for i in out if isinstance(eval(str(i)), int)])
fl_in_string = len([i for i in out if isinstance(eval(str(i)), float)])
print('no of int : ', int_in_string, 'no of float : ', fl_in_string)
答案 0 :(得分:2)
看看以下内容:
st = '2.00 00 DBEL 215 Frox Lyxo 2.000 2.00'
floats, ints = 0, 0
for word in st.split():
try:
int(word)
except ValueError:
try:
float(word)
except ValueError:
pass
else:
floats += 1
else:
ints += 1
print('no of int : ', ints, 'no of float : ', floats) # no of int : 2 no of float : 3
我的代码采用了不同的方法。 regex
未使用。字符串在空白处为split
,单个单词被强制转换为float
块内的int
和try
。如果尝试成功(块的else
部分),计数器将增加。
答案 1 :(得分:0)
您不需要再次将数字实际保存在int_in_string
和fl_in_string
上,因此您可以使用两个简单的计数器
int_in_string = 0
fl_in_string = 0
for i in out:
if isinstance(eval(str(i)), int):
int_in_string += 1
elif isinstance(eval(str(i)), float):
fl_in_string += 1
答案 2 :(得分:0)
如果您所有的整数都遵循\d+
模式,而所有的浮点数都遵循\d+\.\d+
模式,则可以按以下方式对其进行计数
>>> num_ints = sum(1 for _ in re.finditer(r'(?<=\W)\d+(?=\W)', st))
>>> num_floats = sum(1 for _ in re.finditer(r'(?<=\W)\d+\.\d+(?=\W)', st))
>>> print (num_ints, num_floats)
6 1
答案 3 :(得分:0)
假定不是正则表达式。
st = '2.00 00 DBEL 215 Frox Lyxo 2.000 2.00'
s = [i.isdigit() for i in st.split(' ') if not(i.isalpha())]
print('no of int : ', s.count(True), 'no of float : ', s.count(False))