在Python中初始化矩阵?

时间:2013-08-14 09:31:26

标签: python matrix

我正在使用此代码创建一个python矩阵(5行,2列):

[[0 for x in xrange(2)] for x in xrange(5)]

有人可以解释那部分0 for x in xrange(2)以及当我尝试按照以下方式执行此操作时它无效的原因:

[[0 for x in xrange(2)] 0 for x in xrange(5)]

5 个答案:

答案 0 :(得分:4)

这里有嵌套列表理解。第一位

[0 for x in xrange(2)]

创建长度为2的列表,每个条目设置为0.此列表设置为第二个列表推导的值。以下结果将产生相同的结果:

zeros2 = [0 for x in xrange(2)]
# create 5 copies of zeros2
zeros2x5 = [zeros2[:] for x in xrange(5)] 

答案 1 :(得分:4)

问题中的代码是嵌套列表解析。以Python为例

[x*x for x in range(10)]

返回

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

该语法表示"收集x*x的值,其中xrange(10)"

中包含的每个元素

你当然可以写一些像

这样的东西
[42 for x in range(10)]

将提供

[42, 42, 42, 42, 42, 42, 42, 42, 42, 42]

(这与上面完全相同,只是在您要收集的表达式中未使用值x

"列表理解"然而,它本身就是一个表达式,因此它可以用于另一个外部列表理解...例如

[[x*y for x in range(3)] for y in range(4)]

将返回

[[0, 0, 0],
 [0, 1, 2],
 [0, 2, 4],
 [0, 3, 6]]

在数值常量(或任何其他不可变)的特殊情况下,您可以使用更简单的形式来构建矩阵:

[[0] * 3 for x in range(4)]

返回

[[0, 0, 0],
 [0, 0, 0],
 [0, 0, 0],
 [0, 0, 0]]

因为列表乘以整数n,您会得到一个由连接的原始列表的n个副本组成的列表(因此[0]*5会返回{{ 1}})。

请注意,然而显然是相似的

[0, 0, 0, 0, 0]

不会做同样的事情。原因是虽然仍显示为

[[0] * 3] * 4

在这种情况下,外部列表将由对同一行的4个引用组成,而不是4个独立的行。这意味着在代码

之后
[[0, 0, 0],
 [0, 0, 0],
 [0, 0, 0],
 [0, 0, 0]]

x = [[0] * 3] * 4 x[0][0] = 9 包含

x

而不是

[[9, 0, 0],
 [9, 0, 0],
 [9, 0, 0],
 [9, 0, 0]]

因为由独立行组成的真实矩阵会发生这种情况。

答案 2 :(得分:2)

[0 for x in xrange(2)]

表示“为(0,1)中的每个元素写一个带有”0“的列表”,因此将创建一个包含2个条目的列表,两个都为“0”。
所以你可以看到

[[0 for x in xrange(2)] for x in xrange(5)]

创建一个包含6个条目的列表。

是每个条目的结果
[0 for x in xrange(2)]

最后你有一个列表,包含5个列表,包含2个零。

在你的代码中,第二个“0”毫无意义。

答案 3 :(得分:1)

Ar = []
Ar.append([1,2,3,4])
Ar.append([2,5,6,7])
Ar.append([3,8,10,11])
Ar.append([4,9,12,13])

通过使用list apprehension创建列表列表,我能够像

那样编制索引
print Ar[2][2]

输出

10

答案 4 :(得分:-1)

m=int(input("Enter row"))

n=int(input("Enter column"))

a=[] #Blank Matrix

for i in range(m):#Number of Row Input

    b=[]#Blank List

    for j in range(n):#Number of col Input

        j=int(input("Enter Number in Pocket ["+str(i)+"]["+str(j)+"]")) #Show Row an col Number 

        b.append(j)#add Row Element

    a.append(b)#Add list In Matrix

print(a)#Print Matrix