【发布时间】:2018-05-06 01:40:31
【问题描述】:
我有一个数字列表:testList = [1, [1], [12], 2, 3]
我希望它变成:flatList = [1, 1, 12, 2, 3]
使用如下所示的典型列表理解是行不通的。
flatList = [val for sublist in testList for val in sublist]
TypeError: 'int' object is not iterable
我怀疑这是因为未嵌套的项目被视为可迭代的子列表,所以我尝试了这个:
flatList = [val if isinstance(sublist, int) == False else val for sublist in testlist for val in sublist]
但我不清楚语法,或者是否有更好的方法来做到这一点。试图从 else 子句中删除 val 意味着 val 未定义。照原样,它仍然给我同样的 TypeError。
下面的代码确实对我有用,但我很想看看它是否可以以列表理解的方式完成,以及人们对此的看法。
for sublist in testlist:
if type(sublist) == int:
flat.append(sublist)
else:
for val in sublist:
flat.append(val)
print(flat)
>>>[1, 1, 12, 2, 3]
【问题讨论】:
-
子列表可以包含多个整数吗?
-
在 else 块中,可以将 for 替换为
flat.extend(sublist) -
@AidanHorton 它可以包含多个整数。
-
@stack_n_queue 感谢您指出这一点。
标签: python python-3.x multidimensional-array