这篇文章主要介绍了如何基于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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
我想生成dict中索引列表中的所有值组合: 每次,每个判决条目的一个项目将被选择并组合到其他键的项目中,所以我有: 我知道在中可以生成列表中项目的组合,但我不认为我可以在这里使用它,因为我有不同的值“池”。 是否有任何现有的解决方案可以做到这一点,或者我应该如何着手自己做到这一点,我完全被这种嵌套结构所困扰。
如何生成版本1(基于时间的)UUID?是否有一个单独的库,或者它是如何在Java7 API中提供的,我错过了它。
两种打字方式我都不知道。等待的集合。abc。Awaitable涵盖一个基于生成器的协同路由,它是中定义的Awaitable之一 https://www.python.org/dev/peps/pep-0492/#await-expression 从Python 3.6开始,几个API,如和实际上返回基于生成器的协程。我通常对它们的返回值应用关键字没有问题,但是我要处理正常值和可等待值的混合,我需要
问题内容: 如何在Python中生成一个列表的所有排列,独立于该列表中元素的类型? 例如: 问题答案: 从Python 2.6(如果你使用的是Python 3)开始,你可以使用标准库工具:itertools.permutations。 如果你出于某种原因使用旧版Python(),或者只是想知道它的工作原理,那么这是一种不错的方法,取自 http://code.activestate.com/rec
问题内容: 目前,我试图让所有可能的组合从的,是每一个元素只包含一个字母。 在本身包含相同字母两次甚至更多,他们只应该,因为他们经常会出现使用。 在稍后应该含有最多的给定的长度从最小的2个字母的所有组合。 我在此处搜索了stackoverflow,但只发现了忽略以下事实的置换函数:每个字母仅在出现时才经常使用。 这是我的第一个Swift 2项目,所以请原谅我的绿色态度:) 我想要的是 我目前的做法
问题内容: 我正在用Python编写一个Chess程序,该程序需要生成骑士的所有动作。对于那些不熟悉国际象棋的人,骑士会以L形移动。 因此,考虑的位置,骑士可以移动到,,,)等共(最多)八个不同的移动。 我想编写一个函数,该函数在列表中生成这些元组。在Python中最简单的方法是什么? 问题答案: 好的,感谢Niall Byrne,我想到了这个: