在Python中创建使用备用0和1作为生成器的列表

时间:2015-01-27 08:30:11

标签: python generator

给定一个列表作为输入:

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方法是什么?

4 个答案:

答案 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)