問題は、list.remove
返品None
です。を置き換えることlist1=list1.remove(...)
でこれを簡単に解決できますが、他の解決策を提案できますか
- バグのあるコードになる可能性があるため、list1、list2 を変更しないでください。
- list.remove はあまり効果的ではないため、少し高速です
推奨コード:
import timeit
from itertools import izip_longest
def via_remove(l1, l2):
count = 1
while max(l1)>min(l2):
count+=1
l1.remove(max(l1))
l2.remove(min(l2))
return count
def with_itertools(l1, l2):
c = 1
for l1_max, l2_min in izip_longest(sorted(l1, reverse=True), sorted(l2)):
if l1_max <= l2_min:
break
c += 1
return c
print timeit.timeit('from __main__ import via_remove; via_remove(range(1000), range(1000))', number=100)
7.82893552113
print timeit.timeit('from __main__ import with_itertools; with_itertools(range(1000), range(1000))', number=100)
0.0196773612289