取 a 列表中的 num 个元素(也是列表),每个元素中取一个字符,与其他元素中的字符进行排列组合
向各位大侠请教,怎样设计代码才更 pythonic? 有没有更好的处理方法?
thanks for yr time !
'''
# using python3.5
import itertools
import copy
# 对两个列表中元素进行排列
def listmlist(list1, list2):
for a in list1:
for b in list2:
yield str(a) + str(b)
yield str(b) + str(a)
# 取列表中所有的元素进行排列,采用递归
def alllist(u):
for i in u:
temp = copy.deepcopy(u)
temp.remove(i)
if len(temp) > 1:
return set(listmlist(i, alllist(temp)))
else:
return set(listmlist(i, temp[0]))
# 取列表中 num 个元素进行排列
def permute(u, num):
result = set()
# 取 2 个元素的情况
if num == 2:
for g in itertools.combinations(u, r=num):
result.update(set(listmlist(*g)))
return result
# 取 1 个元素的情况
if num == 1:
for g in itertools.combinations(u, r=num):
result.update(set(g[0]))
return result
# 取所有元素的情况,调用 alllist()
if len(u) == num:
return alllist(u)
# 取两个元素以上的情况
for i in u:
temp = copy.deepcopy(u)
temp.remove(i)
for g in itertools.combinations(temp, r=num-1):
if len(g) > 2:
result.update(makepasswd(list(g), num=len(g))) #这个地方总觉得有问题,算是递归吗?
else:
result.update(set(listmlist(i, listmlist(*g))))
return result
if __name__ == '__main__':
a = [[2,3], [3,4,5,6], [9], [88,77]]
print(permute(a, 2))
print(permute(a, 4))
print(permute(a, 1))
'''
1
hitmanx 2016-08-30 18:49:21 +08:00 1
output = [s for s in itertools.product(*a)]
花了 2 分钟,拿 google 一搜就有了"python nested lists permutation".. |