編集
まあ、私はダンカンのものとかなり同じ解決策を書きました。だから私は自分が書いたものを削除し、私が最良の解決策であると考えるものを許可し、1つのダンカンの解決策とマルティノーの提案を混ぜ合わせます(any()の使用はlist()またはリストの使用よりもはるかに好ましいように見えます私が書いたものとしての理解;非常に良いアイデアany() 、それはconsume() IMOをインポートする複雑さよりも優れています)
def disting(L):
dust,right = [],[]
dustapp = dust.append
rightapp = right.append
any(rightapp(x) if x else dustapp(x) for x in L)
return right,dust
for seq in ((10,None,'a',0,None,45,'qada',False,True,0,456),
[False,0,None,104,True,str,'',88,'AA',__name__]):
yay,nay = disting(seq)
print 'seq == %r\nyay == %r\nnay == %r' % (seq,yay,nay)
print '---------------------------------------'
結果
seq == (10, None, 'a', 0, None, 45, 'qada', False, True, 0, 456)
yay == [10, 'a', 45, 'qada', True, 456]
nay == [None, 0, None, False, 0]
---------------------------------------
seq == [False, 0, None, 104, True, <type 'str'>, '', 88, 'AA', '__main__']
yay == [104, True, <type 'str'>, 88, 'AA', '__main__']
nay == [False, 0, None, '']
---------------------------------------
ちなみに、any()rightapp(x)
を使用すると、dustapp(x)
Noneが返されるため機能します。TrueまたはTrueと同等のものが返される場合、 any()内の反復は停止します!