为了账号安全,请及时绑定邮箱和手机立即绑定

通过列表理解拼合列表

通过列表理解拼合列表

守着星空守着你 2021-03-29 12:32:32
我正在尝试使用python中的列表理解来扁平化列表。我的清单有点像[[1, 2, 3], [4, 5, 6], 7, 8]只是为了打印,然后在此列表中的单个项目,我编写了此代码   def flat(listoflist):     for item in listoflist:             if type(item) != list:                     print item             else:                     for num in item:                             print num  >>> flat(list1)12345678然后我使用相同的逻辑通过列表理解来整理列表,但出现以下错误    list2 = [item if type(item) != list else num for num in item for item in list1]    Traceback (most recent call last):    File "<stdin>", line 1, in <module>    TypeError: 'int' object is not iterable如何使用列表理解来展平这种类型的列表?
查看完整描述

3 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

>>> from collections import Iterable

>>> from itertools import chain

单线:


>>> list(chain.from_iterable(item if isinstance(item,Iterable) and

                    not isinstance(item, basestring) else [item] for item in lis))

[1, 2, 3, 4, 5, 6, 7, 8]

可读版本:


>>> def func(x):                                         #use `str` in py3.x 

...     if isinstance(x, Iterable) and not isinstance(x, basestring): 

...         return x

...     return [x]

... 

>>> list(chain.from_iterable(func(x) for x in lis))

[1, 2, 3, 4, 5, 6, 7, 8]

#works for strings as well

>>> lis = [[1, 2, 3], [4, 5, 6], 7, 8, "foobar"]

>>> list(chain.from_iterable(func(x) for x in lis))                                                                

[1, 2, 3, 4, 5, 6, 7, 8, 'foobar']

使用嵌套列表理解:(与相比,速度会很慢itertools.chain):


>>> [ele for item in (func(x) for x in lis) for ele in item]

[1, 2, 3, 4, 5, 6, 7, 8, 'foobar']


查看完整回答
反对 回复 2021-04-06
?
ITMISS

TA贡献1871条经验 获得超8个赞

没有人给出通常的答案:

def flat(l):
  return [y for x in l for y in x]

在StackOverflow周围有这个问题的虚假信息。


查看完整回答
反对 回复 2021-04-06
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

您正在尝试遍历一个数字,而这个数字是您无法做到的(因此会出现错误)。


如果您使用的是python 2.7:


>>> from compiler.ast import flatten

>>> flatten(l)

[1, 2, 3, 4, 5, 6, 7, 8]

但请注意,该模块现已弃用,并且在Python 3中不再存在


查看完整回答
反对 回复 2021-04-06
  • 3 回答
  • 0 关注
  • 194 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号