문제

다음과 같은 중첩 목록 목록으로 구성된 입력이 있습니다.

l = [[[[[39]]]], [1, 2, 3], [4, [5, 3], 1], [[[[8, 9], 10], 11], 12]]

중첩 된 목록의 모든 숫자의 합을 기준 으로이 목록을 정렬하고 싶습니다.

[39, 6, 13, 50]

그런 다음 이것들을 기반으로 정렬하고 싶습니다. 따라서 출력은 다음과 같습니다.

[[1, 2, 3], [4, [5, 3], 1], [[[[39]]]], [[[[8, 9], 10], 11], 12]]

이 작업을 수행하는 멋진 피티닉 방법은 무엇입니까?

도움이 되었습니까?

해결책

Python의 구문에 최근 추가를 사용하여 지금까지 제공된 답변에 대한 약간의 단순화 및 일반화 :

>>> l = [[[[[39]]]], [1, 2, 3], [4, [5, 3], 1], [[[[8, 9], 10], 11], 12]]
>>> def asum(t): return sum(map(asum, t)) if hasattr(t, '__iter__') else t
...
>>> sorted(l, key=asum)
[[1, 2, 3], [4, [5, 3], 1], [[[[39]]]], [[[[8, 9], 10], 11], 12]]

다른 팁

약간의 재귀 기능이 수행됩니다.

def asum(a):
    if isinstance(a, list):
        return sum(asum(x) for x in a)
    else:
        return a

l = [[[[[39]]]], [1, 2, 3], [4, [5, 3], 1], [[[[8, 9], 10], 11], 12]]
l.sort(key=asum)
print l
l.sort(key=sum_nested)

어디에 sum_nested() 이다:

def sum_nested(astruct):
    try: return sum(map(sum_nested, astruct))
    except TypeError:
        return astruct


assert sum_nested([[([8, 9], 10), 11], 12]) == 50
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top