使用Python列出多列表元素的排列组合

假设给出多个列表,然后从每个列表中取一个元素,构成一个元组,列出所有这样的元组的排列组合。

这里给出两个算法:一个需要循环嵌套,一个不用,代码和输出如下。

算法

#!/usr/bin/python
#Two method for generate a list whose item is all possible permutation and combination come from every item of many list.

A = ['1', '2']
B = ['a', 'b', 'c']
C = ['A', 'B', 'C', 'D']

retList = []

#需要嵌套循环的算法
for a in A:
    for b in B:
        for c in C:
            retList.append((a,b,c))
print retList

print '*' * 40

#不需要嵌套循环的算法
def myfunc(*lists):
    #list all possible composition from many list, each item is a tuple.
    #Here lists is [list1, list2, list3], return a list of [(item1,item2,item3),...]

    #len of result list and result list.
    total = reduce(lambda x, y: x * y, map(len, lists))
    retList = []

    #every item of result list.
    for i in range(0, total):
        step = total
        tempItem = []
        for l in lists:
            step /= len(l)
            tempItem.append(l[i/step % len(l)])
        retList.append(tuple(tempItem))

    return retList

print myfunc(A,B,C)

输出

[('1', 'a', 'A'), ('1', 'a', 'B'), ('1', 'a', 'C'), ('1', 'a', 'D'), ('1', 'b', 'A'), ('1', 'b', 'B'), ('1', 'b', 'C'), ('1', 'b', 'D'), ('1', 'c', 'A'), ('1', 'c', 'B'), ('1', 'c', 'C'), ('1', 'c', 'D'), ('2', 'a', 'A'), ('2', 'a', 'B'), ('2', 'a', 'C'), ('2', 'a', 'D'), ('2', 'b', 'A'), ('2', 'b', 'B'), ('2', 'b', 'C'), ('2', 'b', 'D'), ('2', 'c', 'A'), ('2', 'c', 'B'), ('2', 'c', 'C'), ('2', 'c', 'D')]
****************************************
[('1', 'a', 'A'), ('1', 'a', 'B'), ('1', 'a', 'C'), ('1', 'a', 'D'), ('1', 'b', 'A'), ('1', 'b', 'B'), ('1', 'b', 'C'), ('1', 'b', 'D'), ('1', 'c', 'A'), ('1', 'c', 'B'), ('1', 'c', 'C'), ('1', 'c', 'D'), ('2', 'a', 'A'), ('2', 'a', 'B'), ('2', 'a', 'C'), ('2', 'a', 'D'), ('2', 'b', 'A'), ('2', 'b', 'B'), ('2', 'b', 'C'), ('2', 'b', 'D'), ('2', 'c', 'A'), ('2', 'c', 'B'), ('2', 'c', 'C'), ('2', 'c', 'D')]
全部评论

相关推荐

虽然大家都在劝退读研,说读研以后也是打工,不如本科直接去打工,但随着现在研究生越来越多,很多企业招聘要求就会变成研究生起招,本科投递简历就会被卡,横向比较时也会因为"本科学历比不上研究生学历"被筛掉,而且你没发现劝退读研的基本都是读完研的人吗?而且进体制、国企等,研究生也比本科生升的快,他们拿着研究生文凭劝你一个本科生,可别当真了
炬火初现:肯定是说本科能有好工作或者满意的可以不读研啊,现在本科能找到好工作的那个不优秀,大学四年赛高中,而且还要和学校斗智斗勇,这种时候自然有的选,要是只是觉得一辈子混口饭吃,大概率也考不上研,或者考上又浑浑噩噩三年,也难说。 而且考研所谓的优势说实话是你用差不多四年的时间成本(考一年,读三年)换过来的,而且还未必读完有今年的就业市场,当然不能随便决定读。 再还要看专业,一些稀奇古怪的专业说实话根本没有办法创造出什么价值,也没钱赚(如果有爱好,可以适当降低报酬标准)。现在非92的研究生说实话也没啥太多所谓优势,难说。 所以任何时候都要具体情况具体分析,不能一概而论。 一点点小看法。欢迎大家友善讨论。
点赞 评论 收藏
分享
05-23 20:31
已编辑
武汉大学 Java
内向的柠檬精在研究求职打法:注意把武大标粗标大 本地你俩不是乱杀
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务