2

「ノードの極端なパターン」を使用して、ノードのリストで最小値を見つけることになっています。私はそのmin()機能を使用することを許可されていません。ある種のループまたは再帰を使用する必要があると思います。配列の「極端なパターン」は次のとおりです。

    largest = items[0]
    for i in range(0,len(items),1):
        if (items[i] > largest):
            largest = items[i]

ただし、このパターンは、ノードを含む次のようなリストでは機能しません。

    [1, [23, [53, [54, [5, None]]]]]

上記のようなリストで最小値を見つけるために同様のパターンを実装するにはどうすればよいですか?

4

4 に答える 4

3
curList = items
if curList:
    largest = items[0]
    while curList is not None:
        if (curList[0] > largest):
            largest = curList[0]
        curList = curList[1]
    print largest
于 2012-11-18T22:29:17.427 に答える
1
car = lambda lst: lst[0]  # value
cdr = lambda lst: lst[1]  # next list

lst = items
if lst:  # not empty
   largest = car(lst)
   while lst is not None:
         if largest < car(lst):
            largest = car(lst)
         lst = cdr(lst)
   print(largest)

于 2012-11-20T06:36:24.757 に答える
1

これは、Python 3で機能する@aw4llyの回答のバリエーションです。

def myMin(lst):
    smallest = None
    for i in lst:
        if isinstance(i, list):
            i = myMin(i)
        if smallest is None or i is not None and i < smallest:
            smallest = i
    return smallest

これは、部分的または完全に空のリストを含む、あらゆる種類のネストされたリストを処理できます (ここでの目的では、空のリストは、他の「空の」リストを除いてメンバーを持たないリストです)。空のリストはNone最小値として返されますが、これは Python の標準関数とまったく同じではありませんmin(ただし、再帰が少し簡単になります)。

>>> print(myMin([1, 2, 3, [4, [5], [], 0, [6, 7]], [[8], 9]]))
0
>>> print(myMin([[[],[[],[],[[],[]],]],[],[[]]]))
None
于 2012-11-18T23:00:31.040 に答える