是的,我知道这个主题已经被覆盖过了(这里,这里,这里,这里),但据我所知,除了一个之外,所有解决方案都在这样的列表中失败:
L = [[[1, 2, 3], [4, 5]], 6]
Run Code Online (Sandbox Code Playgroud)
期望的输出是什么
[1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
或者甚至更好,一个迭代器.我看到的唯一适用于任意嵌套的解决方案可以在这个问题中找到:
def flatten(x):
result = []
for el in x:
if hasattr(el, "__iter__") and not isinstance(el, basestring):
result.extend(flatten(el))
else:
result.append(el)
return result
flatten(L)
Run Code Online (Sandbox Code Playgroud)
这是最好的型号吗?我忽略了什么吗?任何问题?
我试图在python中使用list comprehension来压缩列表.我的名单有点像
[[1, 2, 3], [4, 5, 6], 7, 8]
Run Code Online (Sandbox Code Playgroud)
只是为了打印这个列表中的单个项目我写了这段代码
def flat(listoflist):
for item in listoflist:
if type(item) != list:
print item
else:
for num in item:
print num
>>> flat(list1)
1
2
3
4
5
6
7
8
Run Code Online (Sandbox Code Playgroud)
然后我使用相同的逻辑通过列表理解展平我的列表我得到以下错误
list2 = [item if type(item) != list else num for num in item for item in list1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
Run Code Online (Sandbox Code Playgroud)
如何使用列表理解来展平这种类型的列表?
我有一个嵌套列表与列表和数字混合.
nested = [[1, 2, 3], [4, 5, 6], [7, 8], [9], 10, 11]
Run Code Online (Sandbox Code Playgroud)
嵌套列表只包含数字,它们永远不会包含更多列表.
是否可以编写列表推导来从'嵌套'列表中创建新列表,产生以下输出?
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
Run Code Online (Sandbox Code Playgroud)
这是我的尝试(代码不起作用)
[num if isinstance(item, list) for num in item else item for item in nested]
Run Code Online (Sandbox Code Playgroud)