首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从给定的列表中选择8个元素的所有组合

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

Stack Overflow用户
提问于 2018-08-01 05:48:14
回答 1查看 59关注 0票数 0

我有一个由27个元素组成的列表。

代码语言:javascript
运行
复制
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个元素的所有组合。到目前为止,我已经找到了如下算法。

代码语言:javascript
运行
复制
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)

任何建议都会很有帮助

编辑-

代码语言:javascript
运行
复制
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

我想要做的是得到长度为1和0的组合,其中只有8位是0,我需要丢弃8,7,6,5,4或3个连续0的组合。(模式的第一位总是1)这个方法是非常详尽的。(我刚接触python,请容忍我糟糕的编程)任何更好的算法都会非常棒。

EN

回答 1

Stack Overflow用户

发布于 2018-08-01 05:56:44

里面有一条巨蟒可以找到组合。我是itertools.combinations。这会给你一个生成器,你可以在上面迭代得到所有的组合-

代码语言:javascript
运行
复制
import itertools
for combi in itertools.combinations(str1, 8):
    print combi

或者在前面做一个list来得到所有组合的元组列表-

代码语言:javascript
运行
复制
combi = list(itertools.combinations(str1, 8))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51626090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档