python多列表间的排列组合

学习来源:https://blog.csdn.net/wuuud1/article/details/83991951
涉及的函数库讲解:https://www.runoob.com/python/python-func-reduce.html

涉及使用的库:python3:from functools import reduce

# 常见写法
def lists_combination(lists, code=''):
    '''输入多个列表组成的列表, 输出其中每个列表所有元素可能的所有排列组合
    code用于分隔每个元素'''
    try:
        import reduce
    except:
        from functools import reduce
        
    def myfunc(list1, list2):
        return [str(i)+code+str(j) for i in list1 for j in list2]
    return reduce(myfunc, lists)

# 高手的写法
fn = lambda x, code=',': reduce(lambda x, y: [str(i)+code+str(j) for i in x for j in y], x)
# 调用时直接写:fn(lists, code)

案例:

from functools import reduce
a = [['A', 'B'], ['C', 'D', 'E'],['F','G','H']]

# 常见写法
def lists_combination(lists, code=''):
    '''输入多个列表组成的列表, 输出其中每个列表所有元素可能的所有排列组合
    code用于分隔每个元素'''
    def myfunc(list1, list2):
        return [str(i) + code + str(j) for i in list1 for j in list2]

    return reduce(myfunc, lists)

print('常见写法的结果:\n', lists_combination(a, '+'))  # 排列结果用+号连接

# 高手写法
fn = lambda x, code='|': reduce(lambda x, y: [str(i)+code+str(j) for i in x for j in y], x)
# 直接调用fn(lists, code)
res = fn(a, '+')
print('高手写法的结果:\n', res)

执行的结果:
在这里插入图片描述

你可能感兴趣的:(python,开发语言)