Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列表列表分解为具有不可编辑列表元素的单个列表_Python - Fatal编程技术网

Python 将列表列表分解为具有不可编辑列表元素的单个列表

Python 将列表列表分解为具有不可编辑列表元素的单个列表,python,Python,参考: 虽然上面提到的解决方案是有帮助的,但我的问题略有不同,我想知道是否有一种类似python的方法来解决它 a = [['a-3','b-3'],'r',['j']] 我想要的是一种使“a”等于以下值的干净方法: a = ['a-3','b-3','r','j'] 我一直在使用Python2.4,因此与2.4兼容的pythonic解决方案将非常好,但我仍然会发现2.7+示例也很有趣 主要的问题是存在不可iterable元素,否则sum(lst,[])工作得很好,2.7+的chain方法

参考:

虽然上面提到的解决方案是有帮助的,但我的问题略有不同,我想知道是否有一种类似python的方法来解决它

a = [['a-3','b-3'],'r',['j']]
我想要的是一种使“a”等于以下值的干净方法:

a = ['a-3','b-3','r','j']
我一直在使用Python2.4,因此与2.4兼容的pythonic解决方案将非常好,但我仍然会发现2.7+示例也很有趣

主要的问题是存在不可iterable元素,否则sum(lst,[])工作得很好,2.7+的chain方法也是如此。那么:

itertools.chain.from_iterable(map(lambda i: i if type(i) == list else [i], a))
或者,为了可读性:

def assure_is_list(a):
   return a if type(a) == list else [a]

itertools.chain.from_iterable(map(assure_is_list, a))
那么:

itertools.chain.from_iterable(map(lambda i: i if type(i) == list else [i], a))
或者,为了可读性:

def assure_is_list(a):
   return a if type(a) == list else [a]

itertools.chain.from_iterable(map(assure_is_list, a))
希望这有帮助


希望这有帮助,Pythonic解决方案可以有很多意义。考虑到(PEP 20),这是我对该线程的贡献:

def dec(input_, output_):
    if type(input_) is list:
        for subitem in input_:
            dec(subitem, output_)
    else:
        output_.append(input_)
例如:

input_ = [['a-3','b-3', ['x','hello', ['3','b']]],'r',['j']]
output_ = ['a-3', 'b-3', 'x', 'hello', '3', 'b', 'r', 'j']

Pythonic解决方案可能意味着很多事情。考虑到(PEP 20),这是我对该线程的贡献:

def dec(input_, output_):
    if type(input_) is list:
        for subitem in input_:
            dec(subitem, output_)
    else:
        output_.append(input_)
例如:

input_ = [['a-3','b-3', ['x','hello', ['3','b']]],'r',['j']]
output_ = ['a-3', 'b-3', 'x', 'hello', '3', 'b', 'r', 'j']

任何iterable类型的递归展平,除了单独保留字符串(因为您可能不想将这些字符串拆分为字符):


任何iterable类型的递归展平,除了单独保留字符串(因为您可能不想将这些字符串拆分为字符):


你也可以用这样的东西:

data = [['a-3','b-3', ['x','hello', ['3','b']]],'r',['j']]

while not all(not isinstance(x, list) for x in data):
    for i in xrange(len(data)):
        value = data.pop(i)
        if isinstance(value, list):
            data.extend(value)    
        else:
            data.append(value)

你也可以用这样的东西:

data = [['a-3','b-3', ['x','hello', ['3','b']]],'r',['j']]

while not all(not isinstance(x, list) for x in data):
    for i in xrange(len(data)):
        value = data.pop(i)
        if isinstance(value, list):
            data.extend(value)    
        else:
            data.append(value)

同意,这将适用于itertools可用之前的版本。。求和(map(λi:i,如果类型(i)=列表其他[i],a),[])。。虽然我不确定sum是否打算用作列表分解器。。我希望避免使用条件句,因为它们会使事情看起来有点混乱。。我很惊讶str()和其他一些人可以使用param,但list不能认为这表明了他们对语言的良好了解,但并不是一个真正的python公式(可读性很重要,请参见我自己的答案)。干杯!:)@麦克:嗯,偏好很难讨论。你喜欢你的方式,我喜欢我的:)如果你为
lambda
创建一个函数,并使用一个好名字,比如说
assure\u is\u list
,它会变得非常可读,我认为这种解决方案不太容易出错。@rafalotufo-如果你给lambda函数起一个好名字,那么你的一行程序就会违反PEP 8!;)[当然只是开玩笑…你的答案是完全正确的,而且-最重要的是-被OP选为首选答案。我无法抗拒!;)]同意,这是有效的,这将适用于itertools可用之前的版本。。求和(map(λi:i,如果类型(i)=列表其他[i],a),[])。。虽然我不确定sum是否打算用作列表分解器。。我希望避免使用条件句,因为它们会使事情看起来有点混乱。。我很惊讶str()和其他一些人可以使用param,但list不能认为这表明了他们对语言的良好了解,但并不是一个真正的python公式(可读性很重要,请参见我自己的答案)。干杯!:)@麦克:嗯,偏好很难讨论。你喜欢你的方式,我喜欢我的:)如果你为
lambda
创建一个函数,并使用一个好名字,比如说
assure\u is\u list
,它会变得非常可读,我认为这种解决方案不太容易出错。@rafalotufo-如果你给lambda函数起一个好名字,那么你的一行程序就会违反PEP 8!;)[当然只是开玩笑……你的答案完全正确,而且——最重要的是——被OP选为首选答案。我就是忍不住!;)]