1

文字列からすべての整数を分離してリストし、それらの合計と整数の数を出力する必要があります。私の問題は、現在のコードが、たとえば 456 を 4、5、および 6 に分割し、それらを別々の整数として扱うことです。残念ながら、正規表現はオプションではありません。

私がこれまでに持っているもの:

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)

.

What i need: input:'34 ch33se 34e8 3.4'
output: [34 33 34 8 3 4 ]
im getting now is [3 4 3 3 8 3 4]
4

4 に答える 4

1

ここにワンライナーがあります:

>>> 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]
于 2013-09-15T23:38:48.320 に答える
0

文字列を文字ごとに検索して数字を取得する関数を作成してみませんか? このようなもの:

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
于 2013-09-15T23:45:49.160 に答える
0
def get_integers(string):
    current_integer = ""
    for i in string:
        if i.isdigit():
            current_integer += str(i)
        else:
            if current_integer:
                yield int(current_integer)
                current_integer = ""
    if current_integer:
        yield int(current_integer)

# Prints [34, 33, 34, 8, 3, 4]
print([i for i in get_integers('34 ch33se 34e8 3.4')])

sumあなたはその結果ができるか、何でもできるはずです。

于 2013-09-15T23:36:50.867 に答える