いくつかのキーと値のペアを含む一連の辞書があります。それらを半分に分割し、各セットにいくつかの処理を適用する最も効率的な方法を知りたいです。私はそこにいくつかのライナーが存在すると思います...
つまり、辞書 A、B、C、D がある場合、結果のセット (A、B)、(A、C)、(A、D) が必要であり、残りのセット (C、D) は必要ありません。 ,(B,D),(B,C)
itertools
ワンライナーは通常、同じ文に属します。
>>> 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')
これを試して:
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')
敬意を表して、itertools
明らかにやり過ぎです:
>>> s = 'ABCDE'
>>> [(s[0], x) for x in s[1:]]
[('A', 'B'), ('A', 'C'), ('A', 'D'), ('A', 'E')]
>>>