首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在同一范围内进行多个列表解释的更好方法?

在同一范围内进行多个列表解释的更好方法?
EN

Stack Overflow用户
提问于 2012-07-17 15:59:57
回答 3查看 106关注 0票数 0

目前,我的代码如下

代码语言:javascript
运行
复制
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循环中将值附加到每个列表。

代码语言:javascript
运行
复制
A,B,C,D = [],[],[],[]
for i in xrange(0,n):
    A.append(matrix_x[i][:n])
    B.append(matrix_x[i][n:])
    ... etc

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-17 18:14:16

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

代码语言:javascript
运行
复制
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:])

是的,你可以把它压缩成一个zipzip

代码语言:javascript
运行
复制
A,B,C,D = zip(*((this_[:n],this_[n:],next_[:n],next_[n:])
                  for this_,next_ in zip(matrix_x,matrix_x[1:])))
票数 1
EN

Stack Overflow用户

发布于 2012-07-17 16:05:05

不怎么有意思。你可以创造性地使用zip()一次生成所有4个列表,但我很难称之为“更好”。

票数 2
EN

Stack Overflow用户

发布于 2012-07-17 16:36:41

代码语言:javascript
运行
复制
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是字符串的情况下这样做并没有产生我期望的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11518288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档