2024-04-19 10:53:19 发布
网友
如何转换以下列表:
start = ['foo 1/ bar 2', 'foo 2/ bar 3', 'foo 34/ bar 45']
到以下元组列表:
我开始尝试这样做:
finish = tuple([x.translate(None,'foobar ').replace('/',',') for x in start])
但仍然不完整,而且越来越难看。在
start = ['foo 1/ bar 2', 'foo 2/ bar 3', 'foo 34/ bar 45'] finish = [(int(b[:-1]), int(d)) for a, b, c, d in map(str.split, start)]
map使用split将每个字符串拆分为一个列表,['foo', '1/', 'bar', '2']。然后我们将列表的四个部分分配给变量,并操作我们关心的变量来生成整数。在
map
split
['foo', '1/', 'bar', '2']
有机会使用^{}和一个很好的列表理解能力:
import re start = ['foo 1/ bar 2', 'foo 2/ bar 3', 'foo 34/ bar 45'] r = [tuple(int(j) for j in re.findall(r'\d+', i)) for i in start] print(r) # [(1, 2), (2, 3), (34, 45)]
如果初始列表的结构发生了变化,re.findall仍将捕获所有int,而不是手动拆分和操作字符串。在
re.findall
你的问题只有一句话可以回答:
finish = [(int(s.split(' ')[1][:-1]),int(s.split(' ')[3])) for s in start]
map
使用split
将每个字符串拆分为一个列表,['foo', '1/', 'bar', '2']
。然后我们将列表的四个部分分配给变量,并操作我们关心的变量来生成整数。在有机会使用^{} 和一个很好的列表理解能力:
如果初始列表的结构发生了变化,
re.findall
仍将捕获所有int,而不是手动拆分和操作字符串。在你的问题只有一句话可以回答:
相关问题 更多 >
编程相关推荐