用拆分列出理解

  • 本文关键字:拆分 python
  • 更新时间 :
  • 英文 :


输入:["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

最新更新