파이썬 - 중첩 목록 목록을 정렬하십시오
-
07-07-2019 - |
문제
다음과 같은 중첩 목록 목록으로 구성된 입력이 있습니다.
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
제휴하지 않습니다 StackOverflow