0

我试图在练习测试中回答这个问题:

编写一个函数 def Elimination(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()

如果在我的期末考试中出现这样的问题,我认为这不会解决问题,而且我很确定我不应该用它编写 main 函数,而只是消除一个。那么我该如何回答呢?(请记住,这是一门入门课程,我不应该使用更高级的编码)

4

2 回答 2

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()只删除一个参数,而不是全部。

于 2012-12-17T03:53:27.237 回答
0

为了在列表中找到最大的数字,您需要遍历该列表并在此过程中跟踪最大元素。有几种方法可以实现这一点。

所以这段代码回答了这个问题:

y.extend([n for n in x if n != max(x)])

但我担心它可能无法解决您的问题,即了解它的工作原理和原因。这是将代码扩展为仅使用 for 循环和 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)
于 2012-12-17T03:38:25.027 回答