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

Creating lists with alternate 0 and 1 as generator in Python

给定长度的列表作为输入:

list_len = 5

我们想要创建包含 1 和零的列表:

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

如果您想创建单位矩阵并进行其他数学计算,请使用 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.]])

您可以使用以下代码执行此操作:

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。

作为列表理解:

size = 5
mIter = xrange(size)
matrixList = [[1 if i==x else 0 for i in mIter] for x in mIter]
print matrixList

创建此类列表的 Pythonic 方法是使用列表理解:

[ [ 1 if i == j else 0 for j in range(5)] for i in range(5)]

顺便说一句,generator 是 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)