Python 正确地从字符串中分离整数(无正则表达式)
我需要从一个字符串中分离出所有整数,列出它们,并打印它们的总和和整数的#。我的问题是,例如,我当前的代码将456拆分为4、5和6,并将它们作为单独的整数处理。不幸的是,regex不是一个选项 到目前为止,我所拥有的:Python 正确地从字符串中分离整数(无正则表达式),python,python-3.x,Python,Python 3.x,我需要从一个字符串中分离出所有整数,列出它们,并打印它们的总和和整数的#。我的问题是,例如,我当前的代码将456拆分为4、5和6,并将它们作为单独的整数处理。不幸的是,regex不是一个选项 到目前为止,我所拥有的: def tally(text): s = ','.join(x for x in text if x.isdigit()) numbers = [int(x) for x in s.split(",")] num=len(numbers) t=sum(numbers) print
def tally(text):
s = ','.join(x for x in text if x.isdigit())
numbers = [int(x) for x in s.split(",")]
num=len(numbers)
t=sum(numbers)
print ('There are', num, 'integers in the input summing up to', t)
你应该能够对结果进行求和
您应该能够对结果进行求和。这里有一条单行线:
>>> s = '34 ch33se 34e8 3.4'
>>> map(int, filter(None, ''.join(map(lambda c: (c.isdigit() and c or ' '), s)).split(' ')))
[34, 33, 34, 8, 3, 4]
这是一条单行线:
>>> s = '34 ch33se 34e8 3.4'
>>> map(int, filter(None, ''.join(map(lambda c: (c.isdigit() and c or ' '), s)).split(' ')))
[34, 33, 34, 8, 3, 4]
为什么不创建一个函数,逐字符搜索字符串并获取数字?大概是这样的:
def find_numbers(string):
numbers = []
usable = True #mark unusable if its inside a word
latest_number = ''
for char in string:
if char in '1234567890' and usable:
latest_number += char
continue
elif latest_number:
numbers.append(int(latest_number))
latest_number = ''
if char in ' ,':
usable = True
else:
usable = False
if latest_number: numbers.append(int(latest_number))
return numbers
使用此功能,您可以轻松获取数字:
>>> a = 'hello 123 wh3at? 2'
>>> find_numbers(a)
[123, 2]
编辑:
如果要包含单词中的整数:
def find_numbers(string):
numbers = []
latest_number = ''
for char in string:
if char in '1234567890':
latest_number += char
elif latest_number:
numbers.append(int(latest_number))
latest_number = ''
if latest_number: numbers.append(int(latest_number))
return numbers
为什么不创建一个函数,逐字符搜索字符串并获取数字?大概是这样的:
def find_numbers(string):
numbers = []
usable = True #mark unusable if its inside a word
latest_number = ''
for char in string:
if char in '1234567890' and usable:
latest_number += char
continue
elif latest_number:
numbers.append(int(latest_number))
latest_number = ''
if char in ' ,':
usable = True
else:
usable = False
if latest_number: numbers.append(int(latest_number))
return numbers
使用此功能,您可以轻松获取数字:
>>> a = 'hello 123 wh3at? 2'
>>> find_numbers(a)
[123, 2]
编辑:
如果要包含单词中的整数:
def find_numbers(string):
numbers = []
latest_number = ''
for char in string:
if char in '1234567890':
latest_number += char
elif latest_number:
numbers.append(int(latest_number))
latest_number = ''
if latest_number: numbers.append(int(latest_number))
return numbers
一个选项使用:
一个选项使用:
你试过了吗?你试过了@Haidro,修好了。谢谢你的提醒。第一个函数获取数字(不在字内),第二个函数获取所有整数。此外,不需要
continue
。它将自动启动列表中的下一项way@Haidro,是的,我们不需要在第二个函数中继续。“我也会修好的。”海德罗,修好了。谢谢你的提醒。第一个函数获取数字(不在字内),第二个函数获取所有整数。此外,不需要continue
。它将自动启动列表中的下一项way@Haidro,是的,我们不需要在第二个函数中继续。我也会修的。