如何基于python生成list的所有的子集

yipeiwu_com6年前Python基础

这篇文章主要介绍了如何基于python生成list的所有的子集,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

不使用递归且不引入标准库,单纯用两个for循环即可得出一个list的所有子集

L = [1, 2, 3, 4]

List = [[]]
for i in range(len(L)):     # 定长
  for j in range(len(List)): # 变长
    sub_List = List[j] + [L[i]]
    if sub_List not in L:
      List.append(sub_List)
print('List =', List)

主要思想:

变长的 List 中的所有元素将会被不断地重复遍历,直到遍历完定长的 L

当然,不进行条件判断也行:

L = [1, 2, 3, 1]
List = [[]]
for i in range(len(L)):     # 定长
  for j in range(len(List)): # 变长
      List.append(List[j] + [L[i]])

print('List =', List)

最后,如果考虑到程序的效率问题,那么建议引入 python 标准库中的 itertools,然后调用 combinations 这个函数

这样可以更加高效地得到一个 list 的所有的子集

代码如下:

from itertools import combinations
L = [1, 2, 3, 1]
result_list = sum([list(map(list, combinations(L, i))) for i in range(len(L) + 1)], [])
print('result_list =', result_list)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

linux环境下安装python虚拟环境及注意事项

创建python虚拟环境virtualenv、virtualenvwrapper 1,为什么需要搭建虚拟环境 由于当机器上两个项目依赖于相同包的不同版本时,会导致项目运行失败,此时可以安...

探索Python3.4中新引入的asyncio模块

使用 Simple Protocol asyncio.BaseProtocol 类是asyncio模块中协议接口(protocol interface)的一个常见的基类。asyncio....

详解Django中的权限和组以及消息

在认证框架中还有其他的一些功能。 我们会在接下来的几个部分中进一步地了解它们。 权限 权限可以很方便地标识用户和用户组可以执行的操作。 它们被Django的admin管理站点所使用,你也...

Python可变参数*args和**kwargs用法实例小结

Python可变参数*args和**kwargs用法实例小结

本文实例讲述了Python可变参数*args和**kwargs用法。分享给大家供大家参考,具体如下: 一句话简单概括:当函数的参数不确定的时候就需要用到*args和**kwargs,前者...

Python中正则表达式的用法总结

正则表达式很神奇啊 # -*- coding:utf-8 -*- import re def print_match_res(res): """打印匹配对象内容""" if...