输入:["0:start:0","1:start:2","1:end:5","0:end:6"]
输出:[[0, "start", 0], [1, "start", 2], ... ]
这个[item.split(":") for item in logs]
没有转换为int。尝试了各种方法,但无法使其工作:[(int(a), b, int(c)) for item in logs for (a,b,c) in item.split(":")]
谢谢!
您可以在列表理解中使用生成器表达式:
a = ["0:start:0","1:start:2","1:end:5","0:end:6"]
b = [[int(x[0]), x[1], int(x[2])] for x in (item.split(":") for item in a)]
print(b)
输出:
[[0, 'start', 0], [1, 'start', 2], [1, 'end', 5], [0, 'end', 6]]
我的回答受到以下启发:列出分解循环变量的理解
为了清晰起见,我会这样做,分两步:
logs = ["0:start:0", "1:start:2", "1:end:5", "0:end:6"]
split_logs = (log.split(':') for log in logs)
result = [(int(a), b, int(c)) for a, b, c in split_logs]
试试这个:
[[int(a), b, int(c)] for a,b,c in [item.split(":") for item in logs]]
你离得很近!
您可以添加map
函数:
[(int(i), j, int(k)) for i, j, k in map(lambda x: x.split(':'), lst)]
列表理解非常复杂,您可能真的应该使用for
循环。然而,我认为这最终是非常可读的:
input_list = ['0:start:0', '1:start:2', '1:end:5', '0:end:6']
transformed = [
[
int(subitem) if subitem.isdigit() else item
for part in item.split(':')
]
for item in input_list
]
print(transformed)
>>> [[0, 'start', 0], [1, 'start', 2], [1, 'end', 5], [0, 'end', 6]]
这是一个嵌套在另一个列表中的理解。内部的迭代遍历原始列表中每个项的子项,如果每个子项只包含数字,则将其转换为int
。