在字符串列表中搜索整数



给定以下字符串列表:

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

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

[ (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

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

from re import compile
INTEGER_REGEX = compile(r'bd+b')

这里的d代表数字(所以01等(,+代表一个或多个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')]

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

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

numbers.append((x))也是numbers.append(x)。对于包含 1 个元素的元组,请在右括号前添加一个逗号。即使这也不能解决它。

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

my_list = ['element0 123 321n', 'element1 223 32221n', 'element2 19823 328771n']
result = [tuple(map(int,x.split()[1:])) for x in my_list]
print(result)

给:

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

最新更新