Python: найти все целые числа внутри строки и сохранить в списке как целое число - PullRequest
0 голосов
/ 10 мая 2018

В поисках эффективного способа поиска всех целых чисел в строке и добавления их в список. Например. «(12, 15)» должно стать [12, 15]. Целые числа, которые больше 9, должны оставаться объединенными и не разделяться при добавлении в список.

Если есть способ использовать встроенные функции, лямбда или списки, не могли бы вы поделиться ими? Спасибо.

То, что я имею до сих пор, кажется слишком раздутым.

user_input = '(3, 10)' # or '3 10'

def sti(n):
    s = ''
    l = []
    for index, item in enumerate(n):
        if item.isdigit():
            s += item
        if not item.isdigit():
            l.append(s)
            s = ''

    l.append(s)
    a = list(filter(None, l)) # remove spaces
    a = list(map(lambda x: int(x), a)) # convert to int
    return a

print(sti(user_input))

Ответы [ 4 ]

0 голосов
/ 10 мая 2018

Довольно лучше без импорта какого-либо пакета. v это строка

new_list = [int(item) for item in v if item.isdigit()]
0 голосов
/ 10 мая 2018

Если

new_string = "lol69on420for666"

тогда вы можете сделать что-то вроде,

for letter in new_string:
    if letter == "0" or \
       letter == "1" or \
             ...
       letter == "9":
            append the letter to some list

или

if "6" in new_string:
    append "6" to some list
0 голосов
/ 10 мая 2018

Если нет отрицательных чисел, вы можете использовать itertools.groupby вместе с str.isdecimal:

>>> from operator import itemgetter
>>> from itertools import groupby
>>> list(map(int, map(''.join, map(itemgetter(1), filter(itemgetter(0), groupby('(3, 10)', str.isdecimal))))))
[3, 10]
0 голосов
/ 10 мая 2018

Используйте регулярные выражения:

import re

print(list(map(int, re.findall(r'\d+', user_input))))
...