两个列表中元素的组合

时间:2019-03-20 02:06:09

标签: python list combinatorics

我有两个列表:

list1

我想从list2中提取3个元素,从[a b c 1 2] [a b c 1 3] [a b c 2 3] [a b d 1 2] [a b d 1 3] [a b d 2 3] [a c d 1 2] [a c d 1 3] [a c d 2 3] [b c d 1 2] [b c d 1 3] [b c d 2 3] 中提取2个元素,如下所示(总共12种组合):

import itertools
from itertools import combinations 

def combi(arr, r): 
    return list(combinations(arr, r)) 

# Driver Function 
if __name__ == "__main__": 
    a = ["a", "b", "c", "d"] 
    r = 3
    a= combi(arr, r)
    print (a)
    b = [1, 2, 3]
    s =2
    b = combi(brr, s)
    print (b)
    crr = a + b
    print (crr)
    c = combi(crr, 2)
    print (c)
    for i in range(len(c)):
        for j in range(len(c)):
            print c[i][j]
            print '\n' 

这是我无法使用的代码:

pandas

3 个答案:

答案 0 :(得分:3)

使用itertools个功能combinationsproductchain的组合:

list1 = ["a", "b", "c", "d"]
list2 = [1, 2, 3]

import itertools

comb1 = itertools.combinations(list1, 3)
comb2 = itertools.combinations(list2, 2)
result = itertools.product(comb1, comb2)
result = [list(itertools.chain.from_iterable(x)) for x in result]

结果:

[['a', 'b', 'c', 1, 2],
 ['a', 'b', 'c', 1, 3],
 ['a', 'b', 'c', 2, 3],
 ['a', 'b', 'd', 1, 2],
 ['a', 'b', 'd', 1, 3],
 ['a', 'b', 'd', 2, 3],
 ['a', 'c', 'd', 1, 2],
 ['a', 'c', 'd', 1, 3],
 ['a', 'c', 'd', 2, 3],
 ['b', 'c', 'd', 1, 2],
 ['b', 'c', 'd', 1, 3],
 ['b', 'c', 'd', 2, 3]]

这里有live example

答案 1 :(得分:3)

这可能对您有用:

DataContext

答案 2 :(得分:0)

您可以使用嵌套循环。这是不带任何库的代码(仅当您从每个列表中保留一个元素时才有效!)

list3=[]
for a in list1:
    st=''
    for t in list1:
        if(t!=a):
            st=st+t+' '
    for b in list2:
        st1=''
        for m in list2:
            if(m!=b):
                 st1=st1+m+' '
        list3.append(st+st1.strip())