3

I'm using this Code to create a python matrix (5 rows, 2 columns) :

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

Can some one explain that part 0 for x in xrange(2) and why it didn't worked when i tried to do it as follows :

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

5 回答 5

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)] 
于 2013-08-14T09:34:54.910 回答
4

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

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

返回

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

该语法意味着“收集x*x其中x包含的每个元素的值range(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返回[0, 0, 0, 0, 0])。

请注意,但是显然相似

[[0] * 3] * 4

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

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

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

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

x包含

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

并不是

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

就像由独立行组成的真实矩阵一样。

于 2013-08-14T10:12:40.957 回答
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”没有意义。

于 2013-08-14T09:37:57.013 回答
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])

通过使用列表忧虑创建列表列表,我可以像

print Ar[2][2]

输出

10
于 2016-01-09T18:56:31.997 回答
-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
于 2021-05-28T11:25:37.290 回答