2

ネストされたリストがあり、リスト内のすべての要素を逆にする必要があります。しかし、リストがリストのリストであるかどうかはわかりません。したがって、例は次のとおりです。

p = [1, [2, 3, [4, [5, 6]]]]
print deep_reverse(p)
#>>> [[[[6, 5], 4], 3, 2], 1]

q =  [1, [2,3], 4, [5,6]]
print deep_reverse(q)
#>>> [ [6,5], 4, [3, 2], 1]

私がこれまでに持っているのは:

def is_list(p):
    return isinstance(p, list)

def deep_reverse(a):
    a.reverse()
    for i in a:
        if is_list(i):
            i.reverse()
            print a

2番目のテストであるqのテストではうまく機能しますが、最初のテストでは機能しません。全体をループするために再帰を使用する必要があるかどうかわかりませんか?コードを変更するにはどうすればよいですか?ありがとう。

4

10 に答える 10

4
def deep_reverse(lst):
    try:
        if len(lst) > 1:
            return list(deep_reverse(item) for item in reversed(lst))
        return lst
    except TypeError:
        return lst
于 2012-06-02T01:35:39.243 に答える
4

コードが機能しない理由iは、がリストのリストである場合、deep_reverse内のリストは機能しないためiです。

コードの1行を次のように変更するだけです。

def is_list(p):
    return isinstance(p, list)

def deep_reverse(a):
    a.reverse()
    for i in a:
        if is_list(i):
            deep_reverse(i)  # <=== This is what changed
            print a
于 2012-06-02T01:37:58.287 に答える
1
def deep_reverse(L):
    if L == []:
        return L
    elif type(L) == int:
        return L
    else:
        return deep_reverse(L[1:]) + [deep_reverse(L[0])]

>>> print deep_reverse(p)
[[[[6, 5], 4], 3, 2], 1]

>>> print deep_reverse(q)
[[6, 5], 4, [3, 2], 1]

お役に立てれば

于 2012-06-02T01:48:45.657 に答える
1
>>> def deep_reverse(L):
        for item in reversed(L):
            if isinstance(item,list):
                yield list(deep_reverse(item))
            else:
                yield item


>>> p = [1, [2, 3, [4, [5, 6]]]]
>>> q =  [1, [2,3], 4, [5,6]]
>>> list(deep_reverse(p))
[[[[6, 5], 4], 3, 2], 1]
>>> list(deep_reverse(q))
[[6, 5], 4, [3, 2], 1]
于 2012-06-02T06:21:56.283 に答える
1

これが私の解決策です

def is_list(p):
    return isinstance(p, list)
   
def deep_reverse(p):

 if p==[]:
    return p

 if not is_list(p[0]):
    return deep_reverse(p[1:])+[p[0]]
 
 else:
    return deep_reverse(p[1:])+[deep_reverse(p[0])]
        
于 2013-01-17T19:05:51.127 に答える
0

ここに提案があります:

def deep_reverse(lst):
    if isinstance(lst ,list):
        if sum(1 for x in lst if isinstance(x, list)) == 0:
                        lst = lst[::-1]
                        return lst
        else :
            lst = lst[::-1]
            lst = [deep_reverse(item) for item in lst]     
            return lst
    else:
         return lst
于 2012-12-03T17:34:59.730 に答える
0
def deep_reverse(ls):  
    for i in ls:  
        if type(i)==list:deep_reverse(i)  
    ls.reverse()  
于 2012-06-02T04:43:43.053 に答える
0
def is_list(p):
    return isinstance(p, list)

def deep_reverse(p):

 if p==[]:
    return p

 if not is_list(p):
    return p
 else:
    return deep_reverse(p[1:])+[deep_reverse(p[0])]

テストOK。

于 2013-04-05T09:12:17.317 に答える
0

最もエレガント:

def deep_reverse(L):
    """ assumes L is a list of lists whose elements are ints
    Mutates L such that it reverses its elements and also 
    reverses the order of the int elements in every element of L. 
    It does not return anything.
    """
    # Your code here
    for i in L:
        try:
            deep_reverse(i)
        except:
            pass
    L.reverse()
于 2017-09-16T17:42:40.627 に答える
0

私はこの問題のお尻で古い学校に行きます:

def deepReverse(L):
    """Input a list tot output a reversed form of it"""
    if not L:
        return []
    elif isinstance(L[-1], list):
        return [deepReverse(L[-1])] + deepReverse(L[0:-1])
        
    else:
        return [L[-1]] + deepReverse(L[0:-1])
于 2021-09-17T03:01:08.243 に答える