0

私は模擬試験でこの質問に答えようとしています:

最大値を除くリスト x のすべての要素をリスト y にコピーする関数 def remove(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()

そのような質問が最終的に出てきたとしても、それでうまくいくとは思いません。それを使ってメイン関数を書くべきではなく、排除関数だけを書くべきだと確信しています。では、私はこれにどう答えるでしょうか?(これは入門コースであることを覚えておいてください。より高度なコーディングを使用するべきではありません)

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()。すべてではなく、引数の 1 つだけを削除します。

于 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 に答える