python sum函数的一种新用法

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), [])

查看官方文档有:

sum doc

原来是传入空列表作为初值,用于列表的相加,真是长见识了。但是,Python官方并不推荐这种做法来做可迭代对象的连接,而推荐使用itertoolschain()方法更快速,如下

from itertools import chain
def flatten(lst):
    try:
        return list(chain.from_iterable(lst)) # or return list(chain(*lst))
    except:
        return lst

你可能感兴趣的:(python sum函数的一种新用法)