python 列表有几个元素_python列出多个列表元素构成的排列组合的方法

python列出多个列表元素构成的排列组合:

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

两个方法,一个需要循环嵌套,一个不用。 代码如下: #!/usr/bin/python

#Two method for generate a list whose item is all possible pe

rmutation 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 = re

duce(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')]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值