首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表列表分解为包含不可迭代列表元素的单个列表

将列表列表分解为包含不可迭代列表元素的单个列表
EN

Stack Overflow用户
提问于 2011-06-28 04:38:16
回答 5查看 1.4K关注 0票数 1

参考:python decompose a list Flattening a shallow list in Python

虽然上面提到的解决方案很有帮助,但我的问题略有不同,我想知道是否有pythonic方法来解决它。

代码语言:javascript
复制
a = [['a-3','b-3'],'r',['j']]

我想要的是一种干净的方式,让'a‘等于下面的内容:

代码语言:javascript
复制
a = ['a-3','b-3','r','j']

我坚持使用Python2.4,所以兼容2.4的python解决方案会很棒,但我仍然会发现2.7+示例也很有趣。

主要问题是存在不可迭代的元素,否则sum(lst,[])可以很好地工作,2.7+的链方法也是如此

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-06-28 04:57:32

Pythonic解可以表示很多东西。考虑到readability counts (PEP20),这是我对该主题的贡献:

代码语言:javascript
复制
def dec(input_, output_):
    if type(input_) is list:
        for subitem in input_:
            dec(subitem, output_)
    else:
        output_.append(input_)

示例:

代码语言:javascript
复制
input_ = [['a-3','b-3', ['x','hello', ['3','b']]],'r',['j']]
output_ = ['a-3', 'b-3', 'x', 'hello', '3', 'b', 'r', 'j']
票数 5
EN

Stack Overflow用户

发布于 2011-06-28 04:41:52

这样如何:

代码语言:javascript
复制
itertools.chain.from_iterable(map(lambda i: i if type(i) == list else [i], a))

或者,为了可读性:

代码语言:javascript
复制
def assure_is_list(a):
   return a if type(a) == list else [a]

itertools.chain.from_iterable(map(assure_is_list, a))
票数 2
EN

Stack Overflow用户

发布于 2011-06-28 04:50:14

代码语言:javascript
复制
def flatten(L):
    if not L:
        return L
    elif isinstance(L[0], list):
        return flatten(L[0]) + flatten(L[1:])
    else:
        return [L[0]] + flatten(L[1:])

希望这能有所帮助

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

https://stackoverflow.com/questions/6498671

复制
相关文章

相似问题

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