我有一组带有一些键值对的字典。我想知道将它们分成两半然后对每组应用一些处理的最有效方法。我想那里有一个班轮……
即,如果我有字典 A、B、C、D,我希望得到结果集:(A,B)、(A,C)、(A,D) 而不是剩余的集 (C,D) ,(B,D),(B,C)
itertools
和 one-liners 通常属于同一个句子:
>>> import itertools
>>> s = ['A', 'B', 'C', 'D']
>>> i = itertools.product(s[0], s[1:])
>>> list(i)
[('A', 'B'), ('A', 'C'), ('A', 'D')]
可能是这样的:
例子:
In [17]: from itertools import *
In [18]: lis=('a','b','c','d')
In [19]: for x in islice(combinations(lis,2),len(lis)-1):
print x,
....:
....:
('a', 'b') ('a', 'c') ('a', 'd')
恕我直言,itertools
这显然是矫枉过正:
>>> s = 'ABCDE'
>>> [(s[0], x) for x in s[1:]]
[('A', 'B'), ('A', 'C'), ('A', 'D'), ('A', 'E')]
>>>
尝试这个:
l = ['a','b','c','d']
def foo(l):
s0 = None
for i in l:
if s0 is None:
s0=i
continue
yield (s0,i)
for k in foo(l):
print k
输出:
('a', 'b')
('a', 'c')
('a', 'd')