Combinatorial of elements in Python?
Mikael Olofsson
mikael at isy.liu.se
Wed Aug 15 12:44:30 EDT 2007
Sebastian Bassi wrote:
> Hello, could you do it for an indefinite number of elements? You did
> it for a fixed (2) number of elements. I wonder if this could be done
> for all members in a dictionary.
What is unclear here is in what order the keys should be visited. The
following assumes that the keys should be considered in alphanumeric order.
>>> def combine(d):
if not d:
return []
elif len(d)==1:
return d.values()[0]
else:
keys = d.keys()
keys.sort()
leftKeys = keys[0:len(keys)//2]
rightKeys = keys[len(keys)//2:]
leftDict = dict((key,d[key]) for key in leftKeys)
rightDict = dict((key,d[key]) for key in rightKeys)
return [x+y for x in combine(leftDict) for y in combine(rightDict)]
>>>
A={'field1':['a','A'],'field2':['b','B'],'field3':['c','C'],'field4':['d','D']}
>>> combine(A)
['abcd', 'abcD', 'abCd', 'abCD', 'aBcd', 'aBcD', 'aBCd', 'aBCD', 'Abcd',
'AbcD', 'AbCd', 'AbCD', 'ABcd', 'ABcD', 'ABCd', 'ABCD']
HTH again
/MiO
More information about the Python-list
mailing list