如何解决高效地组合项目清单
我正在尝试使用某种Python科学库查找是否有更有效的方法来找到这些组合。
我正在尝试避免使用本机for
循环和列表附加,而倾向于使用一些NumPy或类似的功能,这在理论上应该是高效的,因为它在后台使用C代码。我很难找到一个,但是对我来说,以高效的方式而不是使用慢速的Python本机结构来进行这些操作是一个相当普遍的问题。
我想知道我看错了地方吗?例如。这似乎无济于事:https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.random.binomial.html
请参阅此处,我从2的下限开始获取长度为5的列表的二项式系数,并找出所有可能的组合。同时,我附加到全局列表,以便从原始输入列表中获得一个不错的“已取物品”列表。
import itertools
input_list = ['a','b','c','d','e']
minimum_amount = 2
comb_list = []
for i in range(minimum_amount,len(input_list)):
curr_list = input_list[:i+1]
print(f"the current index is: {i},the lists are: {curr_list}")
curr_comb_list = list(itertools.combinations(curr_list,i))
comb_list = comb_list + curr_comb_list
print(f"found {len(comb_list)} combinations (check on set length: {len(set(comb_list))})")
print(comb_list)
礼物:
found 12 combinations (check on set length: 12)
[('a','b'),('a','c'),('b','d'),'e'),'e')]
- 是否可以避免
for
循环并使用一些科学库来更快地做到这一点? - 如何更快地做到这一点?
解决方法
最终列表包含从1到console.log(basketballPlayers(2));
的任意长度的所有组合,实际上是Power Set。
看How to get all possible combinations of a list’s elements?。
您想要长度 2 或更多的 input_list 中的所有组合。
要获取它们,您可以运行:
comb_lst = list(itertools.chain.from_iterable(
[ itertools.combinations(input_list,i)
for i in range(2,len(input_list)) ]))
itertools 网站中示例中的 powerset 类似的东西, 但不完全相同(长度从 2 开始,而不是从 1 开始)。
请注意,您代码中的 curr_list 实际上仅用于打印。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。