python中如何求列表中的和_python实现求解列表中元素的排列和组合

求解列表中元素的排列和组合问题这个问题之前就遇到过几次没有太留意,最近在做题的时候遇上挺多的排列组合问题的,想来有必要温习一下了,今天花点时间写一下,之前都是手工写的,后来知道可以直接使用python的内置模块就可以完成这个工作了,今天就使用python的itertools模块来完成这个工作,一共解决四个问题:

1.生成排列,列表中元素不允许重复出现

2.生成排列,列表中元素可以重复出现

3.生成组合,不限元素个数,列表中元素不允许重复出现

4.生成组合,不限元素个数,列表中元素可以重复出现

因为大家都有排列组合的知识这里就不累赘了,问题很简单,下面看具体的实现:

#!usr/bin/env python

#encoding:utf-8

'''''

__Author__:沂水寒城

功能:求解列表中元素的排列和组合问题'''fromitertools import productfromitertools import combinations

import itertools

def test_func1(num_list):'''''

生成排列

列表中元素不允许重复出现

排列数计算为:n!,其中n为num_list列表中元素个数''' tmp_list =itertools.permutations(num_list)

res_list=[]for one intmp_list:

res_list.append(one)

print res_list

print'元素不允许重复出现排列总数为:', len(res_list)

def test_func11(num_list):'''''

生成排列

列表中元素可以重复出现

排列总数计算为:(n*n*n...*n),一共n个n相乘''' num=len(num_list)

res_list=list(product(num_list,repeat=num))

print res_list

print'元素可以重复出现排列总数为:', len(res_list)

def test_func2(num_list):'''''

生成组合,不限元素个数

列表中元素不允许重复出现

组合数计算为:2^n,其中n为num_list列表中元素个数''' res_list=[]for i in range(len(num_list)+1):

res_list+=list(combinations(num_list, i))

print res_list

print'元素不允许重复出现组合总数为:', len(res_list)

def test_func22(num_list):'''''

生成组合,不限元素个数

列表中元素可以重复出现''' res_list=[]

num_list1=[str(i) for i innum_list]for i in range(0,len(num_list)+1):

res_list+=[''.join(x) for x in itertools.product(*[num_list1] *i)]

print res_list

print'元素可以重复出现组合总数为:', len(res_list)if __name__ == '__main__':

num_list=[1,2,3,4]

test_func1(num_list)

print'-------------------------------------'test_func11(num_list)

print'-------------------------------------'test_func2(num_list)

print'-------------------------------------'test_func22(num_list)

————————————————

版权声明:本文为CSDN博主「程序员牡蛎」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/chengxun03/article/details/105498145

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值