在字符串列表中搜索整数

2024-09-22 20:28:31 发布

您现在位置:Python中文网/ 问答频道 /正文

给定以下字符串列表:

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

Tags: 方法字符串in元素列表formy条目
2条回答

您的尝试在字符串的每个字符上迭代。你必须按空格分开这根线。一项str.split完美完成的任务

而且numbers.append((x))numbers.append(x)。对于由1个元素组成的元组,请在右括号前添加逗号。即使这也解决不了问题

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

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)]

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

from re import compile

INTEGER_REGEX = compile(r'\b\d+\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将不匹配,因为它不是一个单词

相关问题 更多 >