将字符串转换为列表列表

时间:2016-10-17 15:32:44

标签: python string list

我有一个字符串,说:

s = "abcdefghi"

我需要创建一个列表,这样列表就会形成: -

list = [['a','b','c'],['d','e','f'],['g','h','i']]

现在字符串可以是任何字符串,但总是长度为n * n

所以如果n = 4.

len(s) = 16

列表将是:

[['1','2','3','4'],['5','6','7','8'],...,['13','14','15','16']]

因此列表列表中的每个列表都有4个长度。

所以我想编写一个函数,它将string和n作为输入并给出 作为输出的列表列表,其中列表中每个列表的长度为n。

怎么能这样做?

更新:

如何将上面的列表列表转换回字符串?

所以如果l = list = [['a','b','c'],['d','e','f'],['g','h','i']]

如何将其转换为字符串: -

s = "abcdefghi"

我在stackoverflow中找到了一个解决方案: -

s = "".join("".join(map(str,l)) for l in list)

谢谢大家!

3 个答案:

答案 0 :(得分:3)

这是完成工作的列表理解:

[list(s[i:i+n]) for i in range(0, len(s), n)]

如果n * n == len(s)始终为真,那么只需输入

即可
n = int(len(s) ** 0.5) # Or use math.sqrt

对于编辑部分,这里是另一个列表理解:

''.join(e for e in sub for sub in l)

答案 1 :(得分:0)

我是numpy的私人粉丝......

import numpy as np
s = "abcdefghi"
n = int(np.sqrt(len(s)))
a = np.array([x for x in s], dtype=str).reshape([n,n])

答案 2 :(得分:0)

from math import sqrt
def listify(s):
    n = sqrt(len(s))
    g = iter(s)
    return [[next(g) for i in range(n)] for j in range(n)]

我喜欢使用生成器来解决这个问题