如何基于字符串位置来拆分字符串

3

给定以下文本:

input_value= """12
23
54"""

我想返回每行的第一个和第二个元素组成的列表:
[[1,2,5], [2,3,4]]

我试图使用一行代码来实现这个,但是很难访问每行的正确索引,然后将它们放入一个单独的列表中。返回的列表数量应该等于每行上存在的数字数:

我尝试了以下代码作为基础,但显然需要更多的逻辑才能检索正确的数字:

new_list = [[elem] for elem in input_value.split('\n')]

这个程序运行良好,但返回的列表中数字是字符串类型,如何将它们转换为整数? - daniel stafford
4个回答

3

使用嵌套的列表推导式

out = [[int(i) for i in x] for x in zip(*input_value.split('\n'))]

输出:

[[1, 2, 5], [2, 3, 4]]

1

你可以使用类似于

[[*elems] for elems in zip(*input_value.split("\n"))]

编辑: 要创建一个整数列表,请使用

[[*map(int, elems)] for elems in zip(*input_value.split("\n"))]

这个程序运行良好,但返回的列表中数字是字符串类型,怎么将它们转换为整型呢? - daniel stafford
@danielstafford 将 [*elems] 替换为 [*map(int,elems)][int(c) for c in elems] - Ben Grossmann

1
input_value= """12
23
54
"""

lst1 = []
lst2 = []
for i in input_value.splitlines():
    if i:
        lst1.append(int(i[0]))
        lst2.append(int(i[1]))

lst = [lst1, lst2]
print(lst)

看看这是否有效。


如果行数超过两位数字怎么办? - Matiiss
如果您有小数字,这将起作用。 - Sifat
是的,这个可以工作,但不适用于更多的位数。 - daniel stafford
只有当您具有双位数时,它才会起作用,真的不行。 - Matiiss

0

另一个可能的解决方案:

[[list(map(int,x))[y] for x in input_value.split()] for y in range(2)]

输出:

[[1, 2, 5], [2, 3, 4]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接