首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python列表理解、解包和多重操作

Python列表理解、解包和多重操作
EN

Stack Overflow用户
提问于 2012-12-20 02:45:19
回答 2查看 30.1K关注 0票数 29

我想通过执行以下操作来解压我创建的元组,这样结果就只是一个简单的列表。我可以在2-3行代码中得到想要的结果,但是肯定有一个oneliner list.comp?

代码语言:javascript
复制
x = range(10)
y = [(i,j**2) for i,j in zip(x,x)]
>>>y
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64), (9
, 81)]
>>>

我想要的是result = [0,0,1,1,2,4,3,9.....]

正在做什么

代码语言:javascript
复制
y = len(x)*[0]
y[::2] = x
y[1::2] = [i**2 for i in x]

给出了我想要的,但如果我需要更一般的情况怎么办:

代码语言:javascript
复制
y = [(i, sqrt(i), i**3, some_operation_on_i, f(i), g(i)) for i in x]

例如,我应该能够得到一个直接的列表,比如result,其中我只指定了一个操作(正方形)来跟随每个i,但现在每个i后面都有任意数量的操作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-20 02:47:28

使用嵌套列表理解:

代码语言:javascript
复制
result = [a for tup in y for a in tup]

示例:

代码语言:javascript
复制
>>> x = range(10)
>>> y = [(i,j**2) for i,j in zip(x,x)]
>>> [a for tup in y for a in tup]
[0, 0, 1, 1, 2, 4, 3, 9, 4, 16, 5, 25, 6, 36, 7, 49, 8, 64, 9, 81]

这也适用于您更一般的情况,或者您可以一步完成所有操作:

代码语言:javascript
复制
y = [a for i in x for a in (i, sqrt(i), i**3, some_operation_on_i, f(i), g(i))]

如果嵌套的列表理解看起来很奇怪,下面是它看起来像一个普通for循环的样子:

代码语言:javascript
复制
y = []
for i in x:
    for a in (i, sqrt(i), i**3, some_operation_on_i, f(i), g(i)):
        y.append(a)
票数 45
EN

Stack Overflow用户

发布于 2012-12-20 02:46:58

代码语言:javascript
复制
>>> import itertools
>>> list(itertools.chain.from_iterable(y))
[0, 0, 1, 1, 2, 4, 3, 9, 4, 16, 5, 25, 6, 36, 7, 49, 8, 64, 9, 81]
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13958998

复制
相关文章

相似问题

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