目前,我的代码如下
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
第二种方式对我来说似乎更有效。有什么方法会更“蟒蛇”,或者还有其他我没有想到的方法
发布于 2012-07-17 18:14:16
我通常更喜欢遍历条目列表本身,而不是遍历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:])
是的,你可以把它压缩成一个zip
的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-17 16:05:05
不怎么有意思。你可以创造性地使用zip()
一次生成所有4个列表,但我很难称之为“更好”。
发布于 2012-07-17 16:36:41
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= resultx解包
尽管在matrix_x是字符串的情况下这样做并没有产生我期望的结果。
https://stackoverflow.com/questions/11518288
复制相似问题