从python中的列表中创建一个矩阵

时间:2018-04-23 00:46:53

标签: python python-3.x

我有一个python中的列表问题,我需要转换为矩阵。列表总是随机的,所以我不知道如何制作它。这是一个例子:

['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '\n', '1', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '1', '\n', '1', ' ', ' ', '1', ' ', ' ', '1', '1', '1', '1', '\n', '1', ' ', ' ', '1', ' ', ' ', ' ', ' ', ' ', '1', '\n', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '\n', '\n']


我希望它看起来像一个矩阵,以便每个' \ n'它会列出一个新列表:

[['1', '1', '1', '1', '1', '1', '1', '1', '1', '1'], ['1', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '1'], ['1', ' ', ' ', '1', ' ', ' ', '1', '1', '1', '1'], ['1', ' ', ' ', '1', ' ', ' ', ' ', ' ', ' ', '1'], ['1', '1', '1', '1', '1', '1', '1', '1', '1', '1']]


我不知道如何做到这一点,所以有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

您可以使用itertools.groupby

from itertools import groupby

def split_at_el(arr, el):
    return [list(j) for i,j in groupby(arr,lambda x: x == el) if not i]

x = ['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '\n', '1', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '1', '\n', '1', ' ', ' ', '1', ' ', ' ', '1', '1', '1', '1', '\n', '1', ' ', ' ', '1', ' ', ' ', ' ', ' ', ' ', '1', '\n', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '\n', '\n']

print(split_at_el(x, '\n'))

输出:

[['1', '1', '1', '1', '1', '1', '1', '1', '1', '1'], ['1', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '1'], ['1', ' ', ' ', '1', ' ', ' ', '1', '1', '1', '1'], ['1', ' ', ' ', '1', ' ', ' ', ' ', ' ', ' ', '1'], ['1', '1', '1', '1', '1', '1', '1', '1', '1', '1']]

也适用于任何更长的字符串:

>>> split_at_el(['hello', 'there', '\n', 'more', 'strings'], '\n')
[['hello', 'there'], ['more', 'strings']]

答案 1 :(得分:1)

您还可以使用列表理解

[list(k) for k in "".join(c).split("\n") if k]