Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正确地从字符串中分离整数(无正则表达式)_Python_Python 3.x - Fatal编程技术网

Python 正确地从字符串中分离整数(无正则表达式)

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

我需要从一个字符串中分离出所有整数,列出它们,并打印它们的总和和整数的#。我的问题是,例如,我当前的代码将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 ('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,是的,我们不需要在第二个函数中继续。我也会修的。