我有一个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']]
我不知道如何做到这一点,所以有人可以帮忙吗?
答案 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]