我正试图在练习测试中回答这个问题:
编写一个函数def def(x,y),它将列表x中除最大值之外的所有元素复制到列表y中。
我能想到的最好的事情是:
def eliminate(x, y):
print(x)
y = x
big = max(y)
y.remove(big)
print(y)
def main():
x = [1, 3, 5, 6, 7, 9]
y = [0]
eliminate(x, y)
main()
如果这样的问题出现在我的决赛中,我不认为会削减它,而且我很确定我不应该用它来编写一个主要功能,只是消除它。那我该怎么回答呢? (请记住,这是一个入门课程,我不应该使用更高级的编码)
答案 0 :(得分:2)
我可能会这样做:
def eliminate(x, y):
largest = max(x)
y[:] = [elem for elem in x if elem != largest]
这会将y
与x
中的所有元素一起填充,除非是最大的元素。例如:
>>> x = [1,2,3]
>>> y = []
>>> eliminate(x, y)
>>> y
[1, 2]
>>> x = [7,10,10,3,4]
>>> eliminate(x, y)
>>> y
[7, 3, 4]
这假定通过“副本”,问题是要求替换y
的内容。如果要将x
的非最大元素附加到y
,则可以使用y.extend
。
请注意,您的版本不处理多个元素具有最大值的情况(例如[1,2,2]
) - .remove()
仅删除其中一个参数,而不是所有参数。< / p>
答案 1 :(得分:0)
为了找到列表中的最大数字,您需要遍历该列表并跟踪该路径中最大的元素。有几种方法可以实现这一目标。
所以这段代码回答了这个问题:
y.extend([n for n in x if n != max(x)])
但我担心它可能无法解决您的问题,即了解其工作原理和原因。这是代码扩展为一种非常直接的方式,只用于循环和if语句。
def trasfer_all_but_largest(transfer_from_list, transfer_to_list):
current_index = 0
index_of_current_largest_element = 0
largest_element_so_far = None
for element in transfer_from_list:
if current_index == 0:
largest_element_so_far = element
else:
if element > largest_element_so_far:
largest_element_so_far = element
index_of_current_largest_element = current_index
current_index = current_index + 1
index_of_largest_element = index_of_current_largest_element
current_index = 0 # reset our index counter
for element in transfer_from_list:
if current_index == index_of_largest_element:
continue # continue means keep going through the list
else:
transfer_to_list = transfer_to_list + [element]
current_index = current_index + 1
return transfer_to_list
list_with_large_number = [1, 2, 100000]
list_were_transfering_to = [40, 50]
answer_list = trasfer_all_but_largest(list_with_large_number, list_were_transfering_to)
print(answer_list)