在CodeWars中做Flatten这道题,之前一直没做出来,今天看Python Documentation发现list有一个extend()方法,便做了出来,如下:
def flatten(lst):
ret = []
for item in lst:
if type(item) is int:
ret.append(item)
else:
ret.extend(item)
return ret
做虽然是做出来了,可是不够美观啊。查看别人的代码之后,居然有一行代码做出来的
def flatten(lst):
return sum(([i] if not isinstance(i, list) else i for i in lst), [])
查看官方文档有:
原来是传入空列表作为初值,用于列表的相加,真是长见识了。但是,Python官方并不推荐这种做法来做可迭代对象的连接,而推荐使用itertools的chain()方法更快速,如下
from itertools import chain
def flatten(lst):
try:
return list(chain.from_iterable(lst)) # or return list(chain(*lst))
except:
return lst