gpt4 book ai didi

python - 从给定列表中选择 8 个元素的所有组合

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:51:01 27 4
gpt4 key购买 nike

我有一个包含 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来得到所有组合的元组列表-

combi = list(itertools.combinations(str1, 8))

关于python - 从给定列表中选择 8 个元素的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51626090/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com