首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python划分列表并打印组合

用Python划分列表并打印组合
EN

Stack Overflow用户
提问于 2016-10-14 23:33:30
回答 2查看 116关注 0票数 0

如果我在python中有一个列表,我想将这个列表划分为一些大小的子列表,然后生成大小为2的sub_lists的所有组合。

例如:

代码语言:javascript
复制
Input: List = ['1','2','3','4']
sub-list size s = 3

我的产出应该是:

代码语言:javascript
复制
Sub-List-1 = ['1','2','3']
Combinations-1 = [('1','2'),('1','3'),('2','3')]

Sub-List-2 = ['2','3','4']
Combinations-2 = [('2','3'),('2','4'),('3','4')]

我试过了,但没用:

代码语言:javascript
复制
combination_list = []     
while (myList):      
    sub_list = []    
    sub_list.append(myList[:s])     
    myList = myList[s:]
    combination_list.append(combinations(sub_list, 2))

我的逻辑是:

  • 创建用于组合的空列表
  • 当我的原始列表不是空的,
    • 为子列表创建一个空列表
    • 将s项附加到子列表中。
    • 从原始列表(子列表中的项目)中删除s项。
    • 生成子列表中元素的组合

但我没有得到预期的产出。能帮我个忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-15 00:51:59

代码语言:javascript
复制
result_list = []
combination_list = []
for i in range(len(myList)-s+1):
    result_list.clear()
    for j in range(i,i+s):
        result_list.append(myList[j])
    for i in combinations(result_list, 2):
        combination_list.append((i[0],i[1]))

我得到了上面的代码,如果您认为它可以改进,或者代码有问题,请告诉我

票数 0
EN

Stack Overflow用户

发布于 2016-10-15 00:33:04

你可以试试这个,希望能帮上忙

代码语言:javascript
复制
import itertools

mylist = ['1','2','3','4']
ls =[]
for i in range(0,int(len(mylist)/2)):
        ls.append([mylist[i],mylist[i+1],mylist[i+2]])

print(len(ls))    /just getting the length to know how many sublist you have
sub1 = ls[0]
sub2 = ls[1]

comb1 =[]
comb2 =[]

//using itertools
comb1 = list(itertools.combinations(sub1,2))
comb2 = list(itertools.combinations(sub2,2))
print("combinations")
print(comb1)
print(comb2)

//如果您想使用任何导入,那么可以使用for-循环来执行逻辑。

代码语言:javascript
复制
ncomb = []
for i in range(len(sub1)-1):
    for a in range(i,len(sub1)-1):
        ncomb.append((sub1[i],sub1[a+1]))
print(ncomb) // output the same [('1', '2'), ('1', '3'), ('2', '3')]

//或更好地理解列表

代码语言:javascript
复制
lsize = len(sub1)
listcomp = [(sub1[x],sub1[y+1]) for x in range(lsize-1) for y in range(x,lsize-1)]
print(listcomp) // output the same [('1', '2'), ('1', '3'), ('2', '3')]

组合 ('1','2'),('1','3'),('2','3')

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40053411

复制
相关文章

相似问题

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