在一些场合中,我们需要对list中的元素进行全排列或组合。虽然现成的函数可以调用,但是如果让我们自己去实现,该如何实现呢 ?
用递归的方法实现如下:
1、循环遍历list,将当前的元素放在一个新的list中。
2、将剩余的元素作为list,递归调用。
代码如下:
def fullindex(arglist):
length = len(arglist)
if length == 1 : return arglist[0]
res = []
for ch in arglist:
if ch == ‘0’ : continue
indexlist = []
temp = []
temp.extend(arglist)
temp.remove(ch)
indexlist.extend(fullindex(temp))
for item in indexlist:
arr = []
arr.extend(ch)
arr.extend(item)
res.append(arr)
# print “in full :”,res
return res
在这个当中,需要注意的是:
1、list的赋值,是按照引用传递的,因此,将剩余的元素赋值给一个临时的list,必须要通过extend的方式。
2、extend 和append的区别在于,append是将一个对象添加到指定的list后面,而extend 是将对象中的元素,添加到list中。这个地方的对象有可能是list , 也有可能是单个的元素,也有可能是一个tuple等等。 如a = [1,2,3] b = [3,4] a.append(b) 的结果: [1,2,3,[3,4]] , 而a.extend(b) 的结果是:[1,2,3,3,4]
python 自带函数实现全排列的方式:
import itertools
print list(itertools.permutations([1, 2, 3,4],3))