搜索整数字符串列表

时间:2018-01-05 22:28:33

标签: python string

给出以下字符串列表:

my_list = ['element0 123 321\n', 'element1 223 32221\n', 'element2 19823 328771\n', ... ]

如何将每个条目拆分为元组列表:

[ (123, 321), (223, 32221), (19823, 328771), ... ]

在我的其他不良尝试中,我设法提取数字,但我遇到了问题,元素占位符还包含此方法包含的数字!它也不会写入tuple,而是list

numbers = list()

for s in my_list:
    for x in s: 
        if x.isdigit():
            numbers.append((x))
numbers

2 个答案:

答案 0 :(得分:6)

我们可以首先构建一个标识整数的正则表达式:

from re import compile

INTEGER_REGEX = compile(r'\b\d+\b')

此处\d代表数字(所以01等),+代表一个或多个< / em>,\b字边界

然后我们可以使用INTEGER_REGEX.findall(some_string)来识别输入中的所有正整数。现在唯一要做的就是遍历列表的元素,并将INTEGER_REGEX.findall(..)的输出转换为元组。我们可以这样做:

output = [tuple(INTEGER_REGEX.findall(l)) for l in my_list]

对于您的给定样本数据,这将产生:

>>> [tuple(INTEGER_REGEX.findall(l)) for l in my_list]
[('123', '321'), ('223', '32221'), ('19823', '328771')]

请注意,非单独字词的数字将匹配。例如,8中的'see you l8er'将不会匹配,因为它不是一个单词。

答案 1 :(得分:3)

您的尝试会迭代字符串的每个字符。你必须根据空白拆分字符串。 str.split完美无缺的任务。

numbers.append((x))也是numbers.append(x)。对于1元素的元组,在结束括号之前添加逗号。即使它也没有解决它。

现在,列表似乎包含一个id(跳过),然后是2个整数作为字符串,那么为什么不拆分,删除第一个标记,并转换为整数元组?

my_list = ['element0 123 321\n', 'element1 223 32221\n', 'element2 19823 328771\n']

result = [tuple(map(int,x.split()[1:])) for x in my_list]

print(result)

给出:

[(123, 321), (223, 32221), (19823, 328771)]