将列表转换为矩阵(python)

时间:2015-02-26 20:29:42

标签: python list matrix

我想将列表转换为矩阵,以便我可以按照我需要的方式使用.append函数。 list = ["1", "2", "3"]应该成为[["1", "2", "3"]]

然后,当我使用list.append(["4", "5", "6"])时,它将变为[["1", "2", "3"], ["4", "5", "6"]]而不是["1", "2", "3", ["4", "5", "6"]]

我该怎么做?

3 个答案:

答案 0 :(得分:3)

你的意思是(矩阵作为列表列表):

In [1]: matrix = [[1,2,3]]

In [2]: matrix
Out[2]: [[1, 2, 3]]

In [3]: matrix.append([4,5,6])

In [4]: matrix
Out[4]: [[1, 2, 3], [4, 5, 6]]

答案 1 :(得分:3)

这可以很容易地完成:

def list_to_matrix(lst):
    return [lst]

用法:

>>> lst = [1,2,3,4]
>>> lst = list_to_matrix(lst)
>>> lst
[[1,2,3,4]]

如果我们有可能获得列表列表形式的内容,我们可以通过这样做来增加一点健壮性:

from collections import Iterable

def list_to_matrix(lst):
    if lst:
        return lst if all(isinstance(item, Iterable) and not isinstance(item, str) for item in lst) else [lst]
    else:
        # returns empty matrix if input list was empty
        return [[]]

请注意,此方法非常脆弱,但至少允许您盲目地安全地传递基本列表或列表形式列表并返回正确的内容。

答案 2 :(得分:0)

这适用于列表中的任何对象。它为每个对象提供伪2d列表中的坐标:

def to_matrix(l, n):
    return [(x[0] / n, x[0] % n , x) for x in l]

to_matrix([objects], 3)的输出为:

[(0, 0, some_object),
 (0, 1, some_object),
 (0, 2, some_object),
 (1, 0, some_object),
 (1, 1, some_object),
 (1, 2, some_object),
 (2, 0, some_object),
 (2, 1, some_object),
 (2, 2, some_object)]

如果您需要一个真正的2d数组,此代码将完成此工作:

def toMatrix(l, n):
    matrix = []
    for i in range (0, len(l), n):
        matrix.append(l[i:i+n])

    return matrix