문제점 :Unflattening 파이썬리스트
인수 으로 목록을 취하여 중첩리스트를 작성 "패턴 화 해제"라는 함수를 작성한다.
다음과 같이 인수리스트의 형식은 다음
정수 항목 인스턴스에 대한 중첩 된리스트의 콘텐츠 것이다 중첩리스트 정수가 아닌 항목 의 시작을 나타내고,
[2- , 'a', 3, 'b', 'c', 'd']는 [ 'a', [ 'b', c ','d ']]로 변환됩니다. 첫 번째 숫자 2는 상위 목록에는 2 개의 항목이 포함됩니다. 'a'는이 상위 목록의 첫 번째 항목입니다. 숫자 3은 3 개의 항목을 포함하는 새로운 하위 목록의 시작을 나타냅니다.
샘플 실행 : 나는 간단한 재귀를 수행 한
>>> unflatten([2, 'x', 'y'])
['x', 'y']
>>> unflatten([ 3, "a", "b", 3, "t", "y", "u" ])
['a', 'b', ['t', 'y', 'u']]
>>> unflatten([ 4, "a", "b", 3, "c", "d", 2, "x", "y", 2, "w" , 3, "t", "y", "u" ])
['a', 'b', ['c', 'd', ['x', 'y']], ['w', ['t', 'y', 'u']]]
. 이제
def unflatten(LIST):
if not len(LIST):
return []
elif isinstance(LIST[0], int):
return [unflatten(LIST[1:])]
else:
return [LIST[0]] + unflatten(LIST[1:])
>>> unflatten([ 4, "a", "b", 3, "c", "d", 2, "x", "y", 2, "w" , 3, "t", "y", "u" ])
[['a', 'b', ['c', 'd', ['x', 'y', ['w', ['t', 'y', 'u']]]]]]
당신이 볼 수 있듯이,리스트의 길이가 내 기본 재귀 제어되지 않으므로 단순히 말에 모든 목록을 종료 : 여기 내 코드입니다.
길이를 반복적으로 추적하거나 반복적으로 추적 할 수있는 방법을 모르겠습니다. 모듈을 가져 오지 않고이 작업을 수행하는 방법을 제안하면 기쁠 것입니다.
'isinstance (LIST [0], int)'이면 다음에'LIST [0]'요소가 있음을 고려해야합니다. 'unflatten (l)'은'unflatten_bis (l [1 :], l [0])'을 호출 할 수 있고'unflatten_bis'는 모든 작업을 수행 할 수있는 도우미 함수를 사용할 수 있습니다. (단지 제안) – fredtantini