在Python中用一行初始化一个2d数组

时间:2015-03-21 14:41:28

标签: python list

我想知道,我怎么能缩短这个:

test = [1, 2, 3]
test[0] = [1, 2, 3]
test[1] = [1, 2, 3]
test[2] = [1, 2, 3]

我试过这样的事情:

test = [1[1, 2, 3], 2 [1, 2, 3], 3[1, 2, 3]]
#or
test = [1 = [1, 2, 3], 2 = [1, 2, 3], 3 = [1, 2, 3]] #I know this is dumb, but at least I tried...

但它没有发挥作用:|

这只是我的愚蠢和尝试无法正常工作的东西,还是有一个适当的语法,我不知道?

3 个答案:

答案 0 :(得分:2)

最简单的方法是

test = [[1, 2, 3], [1, 2, 3], [1, 2, 3]]

但是,如果您想要创建更多数量的列表,那么您可能希望使用list comprehension,就像这样

test = [[1, 2, 3] for i in range(100)]

这将创建一个包含100个子列表的列表。列表理解是创建一个新列表,它可以像这样理解

test = []
for i in range(100):
    test.append([1, 2, 3])

注意:您可以简单地使用list.append来代替test[0] = ...

test = []
test.append([1, 2, 3])
...

如果您查看语言definition of list

list_display        ::=  "[" [expression_list | list_comprehension] "]"

因此,可以使用列表推导或表达式列表构建列表。如果我们看到expression list

expression_list ::=  expression ( "," expression )* [","]

它只是一个逗号分隔的一个或多个表达式。

在你的情况下,

1[1, 2, 3], 2[1, 2, 3] ...

不是有效的表达式,因为1[1, 2, 3]在Python中没有意义。此外,

1 = [1, 2, 3]

表示您要将[1, 2, 3]分配给1,这也不是有效的表达式。这就是为什么你的尝试不起作用的原因。

答案 1 :(得分:1)

您的代码:test = [1 = [1, 2, 3], 2 = [1, 2, 3], 3 = [1, 2, 3]]非常接近。你可以使用字典来做到这一点:

test = {1: [1, 2, 3], 2: [1, 2, 3], 3: [1, 2, 3]}

现在,要调用测试1,只需使用:

test[1]

或者,您可以使用词典理解:

test = {i: [1, 2, 3] for i in range(3)}

答案 2 :(得分:0)

这是列表理解:

test = [[1, 2, 3] for i in range(3)]