如何根据给定条件将字符串转换为2D列表

时间:2018-10-13 16:38:02

标签: python python-3.x list split

我将字符串作为输入。如果@代表列而#代表行,我必须转换为2D列表或矩阵。

例如:从1@-2@3#-3@2@4#-7@8@9[[1,-2,3],[-3,2,4],[-7,8,9]]

这是我的代码。我无法获得确切的结果。

a = input()
b = a.split('#')
c = [list(word) for word in b]
print(c)

但这给了我

[['1', '@', '-', '2', '@', '3'],
 ['-', '3', '@', '2', '@', '4'],
 ['-', '7', '@', '8', '@', '9']]

({'-'属于下一个元素,它不是类似于'-2'的表达式)

2 个答案:

答案 0 :(得分:1)

您快到了。 c = [list(word) for word in b]将单词中的每个字符转换为单独的元素。为避免这种情况,请先将您喜欢的元素归为一个列表:

c = [word.split('@') for word in b]

如果要使条目为整数,则必须明确地做到这一点:

c = [[int(item) for item in word.split('@')] for word in b]

答案 1 :(得分:0)

这是一种使用split分别在#@以及mapint的单元格上执行按行和按列拆分的方法:

s = "1@-2@3#-3@2@4#-7@8@9"

print([list(map(int, x.split("@"))) for x in s.split("#")])

输出:

[[1, -2, 3], [-3, 2, 4], [-7, 8, 9]]

Try it!