所以我需要有一个while循环,只要list1的最大值大于list2的最小值。现在,我有这个:
count=0
list1= mine
list2= friend
while max(list1)>min(list2):
count+=1
list1= list1.remove(max(list1))
list2= list2.remove(min(list2))
return count
但是,无法调用该函数,因为它表示该对象是不可迭代的。有人可以告诉我如何解决这个问题吗?
非常感谢
答案 0 :(得分:2)
list.remove
不返回列表,因此一旦删除第一个值,就将list1和list2变量分配给非可迭代对象,只需更改
list1= list1.remove(max(list1))
list2= list2.remove(min(list2))
到
list1.remove(max(list1))
list2.remove(min(list2))
答案 1 :(得分:2)
list.remove()
修改了列表并返回None
,因此在第一次迭代后,list1
和list2
都将为None
。只需从删除行中删除作业:
while max(list1)>min(list2):
count+=1
list1.remove(max(list1))
list2.remove(min(list2))
答案 2 :(得分:1)
问题是,list.remove
返回None
。虽然您可以通过替换list1=list1.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