2016-11-19 246 views
0
def insert(lst, v): 
""" (list of int, int) -> NoneType 

Insert v into lst just before the rightmost item greater than v, or at 
index 0 if no items are greater than v. 

>>> my_list = [3, 10, 4, 2] 
>>> insert(my_list, 5) 
>>> my_list 
[3, 5, 10, 4, 2] 
>>> my_list = [5, 4, 2, 10] 
>>> insert(my_list, 20) 
>>> my_list 
[20, 5, 4, 2, 10] 
""" 
for idx, val in enumerate(lst): 
    if val > v: 
     lst.insert(idx, v) 
     break 
else: 
    lst.insert(0, v) 

當我嘗試測試函數時,它不通過其中一個隱藏的測試用例,它在列表中有兩個項大於該值。示例中的所有其他內容都會通過。我應該如何更改退貨聲明以解決此問題?在最右邊的項大於值之前將值插入到int列表中?

回答

0

由於該規範要求你最右邊值大於v之前插入,你不能突破年初必須遍歷整個列表:

>>> def insert(lst, v): 
...  rightmost = 0 
...  for i, val in enumerate(lst): 
...   if val > v: 
...    rightmost = i 
...  lst.insert(rightmost, v) 
... 
>>> 

一些測試用例:

>>> my_list = [3, 10, 4, 2] 
>>> insert(my_list, 5) 
>>> my_list 
[3, 5, 10, 4, 2] 
>>> my_list = [5, 4, 2, 10] 
>>> insert(my_list, 20) 
>>> my_list 
[20, 5, 4, 2, 10] 
>>> my_list = [3, 4 ,5, 6, 2] 
>>> insert(my_list, 3) 
>>> my_list 
[3, 4, 5, 3, 6, 2] 

另外請注意,不需要返回聲明,並且您還沒有任何聲明,因此無法更改...