python - 从给定列表中选择 8 个元素的所有组合
问题描述
我有一个包含 27 个元素的列表。
str1=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]
我需要找到从列表中选择 8 个元素的所有组合。到目前为止,我已经找到了一个如下的算法。
def combi(iterable, r):
pool = tuple(iterable)
n = len(pool)
if r > n:
return
indices = list(range(r))
yield tuple(pool[i] for i in indices)
while True:
for i in reversed(range(r)):
if indices[i] != i + n - r:
break
else:
return
indices[i] += 1
for j in range(i+1, r):
indices[j] = indices[j-1] + 1
yield tuple(pool[i] for i in indices)
任何建议都会非常有帮助
编辑-
def getCombinations5(list1):
list1=list1
list2=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
#print list2
#str1='123456'
str1=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]
#print str1
list3=[]
for value in combi(str1,8):
#print '#############################'
#print list3
#print value
#print list2[int(value[0])]
list2[int(value[0])]=0
list2[int(value[1])]=0
list2[int(value[2])]=0
list2[int(value[3])]=0
list2[int(value[4])]=0
list2[int(value[5])]=0
list2[int(value[6])]=0
list2[int(value[7])]=0
#print list2
list3.append(list2[:])
#print list3
#print list3
list2[int(value[0])]=1
list2[int(value[1])]=1
list2[int(value[2])]=1
list2[int(value[3])]=1
list2[int(value[4])]=1
list2[int(value[5])]=1
list2[int(value[6])]=1
list2[int(value[7])]=1
#print '@@@@@@@@@@@@@@@@@'
#print len(list3)
#print list2
print len(list3)
list4=[]
for value in list3:
str2=''.join(str(e) for e in value)
if '00000000' in str2 or '0000000' in str2 or '000000' in str2 or '00000' in str2 or '0000' in str2:
continue
elif '000' in str2:
continue
else:
list0=list(str2)
#print list0
list0=map(int, list0)
list4.append(list0)
print list4
我想要做的是获得 28 长度模式的 1 和 0 的组合,其中只有 8 位是 0,我需要丢弃 8、7、6、5、4 或 3 个连续 0 的组合。(模式的第一位始终是 1)我拥有的这种方法非常详尽。(我是 python 新手,请忍受我糟糕的编程)任何更好的算法都会非常棒。
解决方案
有一个内置的python来查找组合。它是itertools.combinations。这将为您提供一个生成器,您可以在该生成器上进行迭代以获取所有组合 -
import itertools
for combi in itertools.combinations(str1, 8):
print combi
或者list
在它前面做 a 以获得所有组合的元组列表 -
combi = list(itertools.combinations(str1, 8))
推荐阅读
- javascript - 来自自定义钩子的状态在父级而不是子级中使用减速器更新
- javascript - 如何使用 setIterval 逐个字符地缓慢显示消息?
- python - 如何读取 .rtf 文件并转换为 python3 字符串并可以存储在 python3 列表中?
- scala - 根据文件名从 DF 生成 txt
- android - 如何通过改造将数组嵌套对象 Json 解析为 Kotlin?
- node.js - 在 MERN 堆栈应用程序的身份验证过程中结合电话号码验证的最佳方法
- c# - ASP.NET Core:使用动作过滤器向方法添加自定义参数
- django - Wagtail 流图像忽略 HTML 文件
- windows - 什么 Windows SDK 用于监视用户活动?
- node.js - 尝试将我的 API 部署到 heroku 时遇到此问题