Python 如何将/zip枚举为lambda

Python 如何将/zip枚举为lambda,python,python-3.x,lambda,Python,Python 3.x,Lambda,在Python3中,是否有一种方法可以用lambda函数替换groupList函数中的for循环,可能是使用map() def groupList(input_list, output_list=[]): for i, (v, w) in enumerate(zip(input_list[:-2], input_list[2:])): output_list.append(f'{input_list[i]} {input_list[i+1]} {input_list[i+

在Python3中,是否有一种方法可以用lambda函数替换
groupList
函数中的for循环,可能是使用
map()

def groupList(input_list, output_list=[]):
    for i, (v, w) in enumerate(zip(input_list[:-2], input_list[2:])):
        output_list.append(f'{input_list[i]} {input_list[i+1]} {input_list[i+2]}')
    return output_list

print(groupList(['A', 'B', 'C', 'D', 'E', 'F', 'G']))
(来自
groupList
函数的输出将是
['abc'、'bcd'、'cde'、'def'、'efg']

解决方案1:

def groupList(input_list):
    return [' '.join(input_list[i:i+3]) for i in range(len(input_list) - 2)]
解决方案2:

def groupList(input_list):
    return list(map(' '.join, (input_list[i:i+3] for i in range(len(input_list) - 2))))
解决方案1:

def groupList(input_list):
    return [' '.join(input_list[i:i+3]) for i in range(len(input_list) - 2)]
解决方案2:

def groupList(input_list):
    return list(map(' '.join, (input_list[i:i+3] for i in range(len(input_list) - 2))))

除了前面的解决方案之外,一个更有效(但不那么简洁)的解决方案是首先计算一个完整的连接,然后对其进行切片

from itertools import accumulate

def groupList(input_list):
    full_concat = ' '.join(input_list)
    idx = [0]
    idx.extend(accumulate(len(s) + 1 for s in input_list))
    return [full_concat[idx[i]:idx[i+3]-1] for i in range(len(idx) - 3)]

除了前面的解决方案之外,一个更有效(但不那么简洁)的解决方案是首先计算一个完整的连接,然后对其进行切片

from itertools import accumulate

def groupList(input_list):
    full_concat = ' '.join(input_list)
    idx = [0]
    idx.extend(accumulate(len(s) + 1 for s in input_list))
    return [full_concat[idx[i]:idx[i+3]-1] for i in range(len(idx) - 3)]

不相关,但我不建议使用可变容器作为默认参数。另一种方法是使用
None
,并在函数中设置为空列表。谢谢。为什么使用可变容器作为默认参数是个坏主意?不相关,但我不建议使用可变容器作为默认参数。另一种方法是使用
None
,并在函数中设置为空列表。谢谢。为什么使用可变容器作为默认参数是个坏主意?