0

目前我的代码如下

A = [matrix_x[i][:n] for i in xrange(0, n)]
B = [matrix_x[i][n:] for i in xrange(0, n)]
C = [matrix_x[i+n][:n] for i in xrange(0, n)]
D = [matrix_x[i+n][n:] for i in xrange(0, n)]

有没有更好的方法来做到这一点,因为我不断地在同一个 xrange 上循环。在这种情况下,最好不要使用列表推导,而是在单个 for 循环中将值附加到每个列表中。

A,B,C,D = [],[],[],[]
for i in xrange(0,n):
    A.append(matrix_x[i][:n])
    B.append(matrix_x[i][n:])
    ... etc

第二种方式对我来说似乎更有效。什么方式会更“pythonic”,或者还有其他我没有想到的方式

4

3 回答 3

2

并不真地。您可以zip()创造性地使用一次生成所有 4 个列表,但我很难将其称为“更好”。

于 2012-07-17T08:05:05.420 回答
1

我通常更喜欢遍历项目列表本身,而不是xrange(len(list_of_items))一次遍历并处理第 i 个项目。以下是如何按顺序zip查看每一(this,next)对,然后建立您的列表:

A,B,C,D = [],[],[],[]
for this_,next_ in zip(matrix_x,matrix_x[1:]):
    A.append(this_[:n])
    B.append(this_[n:])
    C.append(next_[:n])
    D.append(next_[n:])

是的,您可以真正将其压缩为 a zipof a zip

A,B,C,D = zip(*((this_[:n],this_[n:],next_[:n],next_[n:])
                  for this_,next_ in zip(matrix_x,matrix_x[1:])))
于 2012-07-17T10:14:16.403 回答
0
result = [(matrix_x[i][:n], matrix_x[i][n:], matrix_x[i+n][:n],matrix_x[i+n][n:])  for i in xrange(0, n)]

那么你必须为每个元素 A,B,C,D = result[x] 解包

尽管使用 matrix_x 作为字符串这样做并没有为我产生预期的结果。

于 2012-07-17T08:36:41.397 回答