python嵌套列表理解中的If-else逻辑
我有一个列表,它可以由列表、整数或无组成。我想将iterable元素展平,假设现在只在列表中列出单个元素 例如: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逻辑。我正在尝试类似的方法,但不确定确切的语法是什么 [项目子列表如果为安装子列表,则列出
[[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]