带有返回可变数量值的函数的Python映射

时间:2018-12-03 18:54:33

标签: python python-3.x

在python 3中,我有一个返回可变大小列表的函数

我想在一个列表上运行此功能并连接结果。 例如:

def the_func(x):
    return [x]*x

def mapvar(f,v):
    ans=[]
    for x in v:
        ans.extend(f(x))
    return ans

print (mapvar(the_func,range(10)))

在python中是否有最佳实践来做到这一点?是否有标准的mapvar函数?

2 个答案:

答案 0 :(得分:1)

您所拥有的看起来不错。我只考虑使用flatten并使用内置的map

def the_func(x):
    return [x] * x

def flatten(lst):
    return [x
        for subl in lst
            for x in subl]

print(flatten(map(the_func, range(10))))

答案 1 :(得分:1)

由于该问题被标记为[python-3.x],因此这是一个使用map进行投影并使用itertools.chain.from_iterable进行展平的单行代码:

import itertools
result = list(itertools.chain.from_iterable(map(the_func, range(10))))
print(result)

这比嵌套列表理解版本平均要快1秒(3.3秒vs. 4.1秒),平均使用时间为100万。迭代。