两个列表中元素的组合
Combinations of elements from two lists
我有两个列表:
list1 = ["a", "b", "c", "d"]
list2 = [1, 2, 3]
我想从 list1
中取出 3 个元素,从 list2
中取出 2 个元素进行如下组合(总共 12 种组合):
[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]
这是我无法使用的代码:
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'
结合使用 itertools
函数 combinations
、product
和 chain
:
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
以下方法可能适合您:
>>> from itertools import combinations
>>> list1 = ["a", "b", "c", "d"]
>>> list2 = [1, 2, 3]
>>> [[*x, *y] for x in combinations(list1, 3) for y in combinations(list2, 2)]
[['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]]
您可以使用嵌套 loops.Here 是没有任何库的代码(仅当您从每个列表中保留一个元素时才有效!)
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())
我有两个列表:
list1 = ["a", "b", "c", "d"]
list2 = [1, 2, 3]
我想从 list1
中取出 3 个元素,从 list2
中取出 2 个元素进行如下组合(总共 12 种组合):
[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]
这是我无法使用的代码:
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'
结合使用 itertools
函数 combinations
、product
和 chain
:
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
以下方法可能适合您:
>>> from itertools import combinations
>>> list1 = ["a", "b", "c", "d"]
>>> list2 = [1, 2, 3]
>>> [[*x, *y] for x in combinations(list1, 3) for y in combinations(list2, 2)]
[['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]]
您可以使用嵌套 loops.Here 是没有任何库的代码(仅当您从每个列表中保留一个元素时才有效!)
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())