我有一个列表,其中包含一些如下所示的元素:
data = ["1: 6987", "2: 5436", "7: 9086"]
是否可以将元素组合在一起:
tuple_data = [("1", 6987) , ("2", 5436), ("7", 9086)]
答案 0 :(得分:2)
splits = [record.split(": ") for record in data]
tuple_data = [(first, int(second)) for first, second in splits]
如果您愿意,也可以在一行中完成:
tuple_data = [(first, int(second)) for first, second in [record.split(": ") for record in data]]
答案 1 :(得分:1)
map
和split
可用于此:
data = ["1: 6987", "2: 5436", "7: 9086"]
map(lambda i: (i.split(': ')[0], int(i.split(': ')[1])), data)
结果:
[('1', 6987), ('2', 5436), ('7', 9086)]
lambda
定义了一个匿名函数,split
': '
上的每个元素,并将该拆分的第一部分和第二部分添加到元组,而map
应用匿名(lambda)函数到data
中的每个元素。
可能有更优雅的方式:)。
答案 2 :(得分:0)
列表理解是一种方式:
data = ["1: 6987", "2: 5436", "7: 9086"]
res = [(i.split(':')[0], int(i.split(':')[1])) for i in data]
# [('1', 6987), ('2', 5436), ('7', 9086)]
如果只需要整数,则语法更简单:
res = [tuple(map(int, i.split(':'))) for i in data]
# [(1, 6987), (2, 5436), (7, 9086)]
答案 3 :(得分:0)
您可以使用列表理解:
data = [(i[:i.find(':')], int(i[i.find(':')+1:].strip())) for i in data]
结果:
[(' 1',6987),(' 2',5436),(' 7',9086)]