Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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嵌套列表理解中的If-else逻辑_Python_Python 2.7_List_Nested_List Comprehension - Fatal编程技术网

python嵌套列表理解中的If-else逻辑

python嵌套列表理解中的If-else逻辑,python,python-2.7,list,nested,list-comprehension,Python,Python 2.7,List,Nested,List Comprehension,我有一个列表,它可以由列表、整数或无组成。我想将iterable元素展平,假设现在只在列表中列出单个元素 例如: [[0, 1], [2, 3], 1, 3, 4, 0, None] into [0,1,2,3,1,3,4,0,None] 使用列表理解。我发现了另一个类似的问题,但所有这些元素在该列表中都是可iterable的,因为我的列表中也有整数,如何在第一个for循环的列表理解中使用if-else逻辑。我正在尝试类似的方法,但不确定确切的语法是什么 [项目子列表如果为安装子列表,则列出

我有一个列表,它可以由列表、整数或无组成。我想将iterable元素展平,假设现在只在列表中列出单个元素

例如:

[[0, 1], [2, 3], 1, 3, 4, 0, None] into [0,1,2,3,1,3,4,0,None] 
使用列表理解。我发现了另一个类似的问题,但所有这些元素在该列表中都是可iterable的,因为我的列表中也有整数,如何在第一个for循环的列表理解中使用if-else逻辑。我正在尝试类似的方法,但不确定确切的语法是什么

[项目子列表如果为安装子列表,则列出其他[子列表] 子列表中的子列表,用于子列表中的项目]

根据其他问题,if-else应该在for循环之前发生,而for循环必须按顺序发生。我无法在第一个for循环之后插入if-else,语法只允许if和not-else


有人能帮你理解一下这句话的语法吗?如果在第一个for循环或任何中间for循环中执行if-else,在理解中嵌套for循环?

你可以使用生成器将你的混合列表转换成一个只有列表的iterable:

gen = (x if isinstance(x, collections.Iterable) else [x] for x in A)
然后,您可以使用标准展平习惯用法展平生成器:

flattened = [y for x in gen for y in x]

@mgilson用理解力给出了一个优雅的解决方案。也可以使用错误捕获在自然循环中执行此操作:

items = [[0, 1], [2, 3], 1, 3, 4, 0, None]
flattened = []
for item in items:
    try:
        flattened.extend(item)
    except TypeError:
        flattened.append(item)

print(flattened) #prints [0, 1, 2, 3, 1, 3, 4, 0, None]