再帰を使用してリスト内のすべての値を反復処理するにはどうすればよいですか?[複製]

Nov 22 2020
def recursion_list(number_list):
    if number_list == []:
        return []
    if number_list[0] > 100:
        return number_list[0]
    else:
        return recursion_list(number_list[1:])

リストがある場合は、[1、3、152、100、200]。すべての値を反復処理して、100を超えるすべての値を返したいのですが、これまでのところ、この関数は100を超える最初の値である152のみを返し、残りの値は反復処理しません。リストの残りの部分を繰り返し処理してから、リストとして返すにはどうすればよいですか?したがって、[152、100、200]。

回答

2 MarkM Nov 22 2020 at 09:21

最初の要素が条件を満たしている場合でも、再帰を呼び出す必要があります。

def recursion_list(number_list):
    if not number_list:
        return number_list
    
    if number_list[0] > 100:
        return [number_list[0]] + recursion_list(number_list[1:])
    else:
        return recursion_list(number_list[1:])

    
recursion_list([1, 3, 152, 100, 200])
# [152, 200]

これらの種類の演習では、ジェネレーターの方が明確な場合があります。

def recursion_list(number_list):
    if not number_list:
        return
    
    first, *rest = number_list
    
    if first > 100:
        yield first

    yield from recursion_list(rest)

    
list(recursion_list([1, 3, 152, 100, 200]))
WasifHasan Nov 22 2020 at 09:22

これを試してください。再帰呼び出しがありません。

def recursion_list(number_list):
    if not number_list:
        return []
    if number_list[0] > 100:
        return [number_list[0]] + recursion_list(number_list[1:])
    else:
        return recursion_list(number_list[1:])

print(recursion_list([102,23,12,205]))

再帰は間違いなくこれを行う方法ではありません、あなたはただではありません [x for x in number_list if x > 100]

JoshC Nov 22 2020 at 09:27

最も簡単な方法は、反復を使用することです。

def iteration_list(number_list):
    over_hundred = []
    for i in number_list:
        if i > 100:
            over_hundred.append(i)
    return over_hundred

100は100より大きくないため、これは[152、200]を返します。

Toykato Nov 22 2020 at 09:33

より良いオプションは、コントローラー 'for'を使用して、値の配列([1、3、152、100、200]など)を実行することです。

def recursion_list(number_list):
    sorted_list = []
    for value in number_list:
        if number_list == []:
            return number_list
        if value > 100:  # Considere using   >=   to integrate 100 in your array
            sorted_list.append(value)
    return sorted_list
    # Will give you [152, 200]