Belki itertools.product arıyoruz:
#!/usr/bin/env python
import itertools
a=[1,2]
b=['a','b']
c=[str(s)+str(t) for s,t in itertools.product(a,b)]
print(c)
['1a', '1b', '2a', '2b']
v=[1,'a']
w=[1,'b']
x=[1,'c']
y=[1,'d']
z=[1,'e']
r=[''.join([str(elt) for elt in p]) for p in itertools.product(v,w,x,y,z)]
print(r)
# ['11111', '1111e', '111d1', '111de', '11c11', '11c1e', '11cd1', '11cde', '1b111', '1b11e', '1b1d1', '1b1de', '1bc11', '1bc1e', '1bcd1', '1bcde', 'a1111', 'a111e', 'a11d1', 'a11de', 'a1c11', 'a1c1e', 'a1cd1', 'a1cde', 'ab111', 'ab11e', 'ab1d1', 'ab1de', 'abc11', 'abc1e', 'abcd1', 'abcde']
Bu ürün, ürün olarak 2 ** 5 elemanları edin. İstediğin bu mu?
itertools.product Python 2.6 bulunmaktadır. Önceki sürümleri için, bu kullanabilirsiniz:
def product(*args, **kwds):
'''
Source: http://docs.python.org/library/itertools.html#itertools.product
'''
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
pools = map(tuple, args) * kwds.get('repeat', 1)
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
for prod in result:
yield tuple(prod)
Edit: Çıkış jelibon noktaları olarak, orijinal soru benzersiz kümeler için sorar. Yukarıdaki benzersiz kod setleri üretmek olmaz ise a
, b
, v
, w
, x
, { [(5)]} ya da z
tekrar elementler içerir. Bu sizin için bir sorun ise, o zaman itertools.product göndermeden önce bir dizi her liste dönüştürebilirsiniz:
r=[''.join([str(elt) for elt in p]) for p in itertools.product(*(set(elt) for elt in (v,w,x,y,z)))]