给定一个列表作为输入:
list_len = 5
我们想要创建包含1和0的列表:
[1,0,0,0,0]
[0,1,0,0,0]
[0,0,1,0,0]
[0,0,0,1,0]
[0,0,0,0,1]
创建此类列表的生成器的python方法是什么?
答案 0 :(得分:4)
您可以使用以下代码执行此操作:
def generate_matrix(size):
"""Generate lists which form an eye matrix"""
for i in range(size):
# First, we create a new list with size 0s.
l = [0] * size
# At the specified position, we place a 1.
l[i] = 1
# We yield this new list.
yield l
它形成一个生成器,它产生给定数量的列表,每个列表在前进位置都有1个。
答案 1 :(得分:1)
如果您想创建一个单位矩阵并进行其他数学计算,请使用numpy
:
In [174]: import numpy as np
In [175]: np.eye(list_len)
Out[175]:
array([[ 1., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 0.],
[ 0., 0., 1., 0., 0.],
[ 0., 0., 0., 1., 0.],
[ 0., 0., 0., 0., 1.]])
答案 2 :(得分:1)
作为列表理解:
size = 5
mIter = xrange(size)
matrixList = [[1 if i==x else 0 for i in mIter] for x in mIter]
print matrixList
答案 3 :(得分:1)
创建此类列表的Pythonic方法是使用列表推导:
[ [ 1 if i == j else 0 for j in range(5)] for i in range(5)]
BTW,生成器是Python中的一个特殊对象。以下是如何为相同列表构建生成器:
def gen():
for i in range(5):
yield [ 1 if i == j else 0 for j in range(5)]
使用上述发生器:
for l in gen():
print(l)