Python:查找字符串中的所有整数并将其作为整数存储在列表中

时间:2018-05-09 21:50:40

标签: python python-3.x loops list-comprehension

寻找一种有效的方法来搜索字符串中的所有整数并将它们附加到列表中。例如。 '(12,15)'应该成为[12,15]。大于9的整数应该保持连接状态,并且在附加到列表时不会分开。

如果有办法使用内置函数,lambda或list comprehension,你可以分享那些吗?感谢。

到目前为止我看起来太臃肿了。

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 :(得分:2)

使用正则表达式:

import re

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

答案 1 :(得分:0)

如果

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

答案 2 :(得分:0)

假设没有负数,您可以将itertools.groupbystr.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]

答案 3 :(得分:0)

在不导入任何包的情况下更好。 new_list = [int(item) for item in v if item.isdigit()] 是字符串

{{1}}