2012-09-23 2 views
2

문자열로 채워진 목록을 포함하는 중첩 목록이 있습니다. 내가하려는 일은이 둥지에있는 각 목록을 그 둥지에있는 가장 긴 목록과 같은 길이로 만드는 것입니다. 이것은 쉽게 들리지만 내 시도는 실패했습니다 (프로그래밍에 완전히 익숙하지 않습니다). 내 문제를 해결하기에 충분한 상대적인 대답을 찾을 수 없습니다.목록에있는 모든 목록을 추가하여 동일한 길이의 목록을 만드는 방법

첫째, 가장 긴 목록입니다 시간을 결정 : 다음

maxSS7 = max(len(i) for i in ssValues7)) 

, 나는 그것이 같은 길이없는 경우 '널 (null)'의 일정 금액에 의해 각 목록을 확장 루프를 사용 가장 긴 목록 :

for row in ssValues7: 
    if row < len(maxSS7): 
     row.extend(['null' * (len(maxSS7) - len(row))]) 

나는 가장 긴 목록과 현재 목록 간의 차이를 'null'*로 확장합니다. 오류는 발생하지 않지만 안타깝게도 내 중첩 목록에는 아무런 영향을 미치지 않는 것처럼 보입니다.

누군가 내 오류에 대해 알려주시겠습니까? 어떤 도움이라도 대단히 감사하겠습니다.

+0

'maxSS7'은 가장 긴 목록입니까, 아니면 가장 긴 목록의 * 길이 *입니까? 당신은 당신의 예제 코드에서 그것을 정의하지 않지만, 당신은 * max *를 정의한다. –

+0

이것은 내 역할에있어 바보 같은 실수였습니다. 그것은 maxList가되어야했습니다. – foushad

+0

예제 변수 이름을 일관되게 업데이트했습니다. –

답변

3

문제는 라인이다 : 당신은 정수len(maxSS7)으로 목록row을 비교하고

if row < len(maxSS7): 

. 매번 False으로 평가됩니다. 다음으로 변경하십시오 :

maxLen = max(map(len, myList)) 
for row in myList: 
    if len(row) < maxLen: 
     row.extend(...) 

Martijn Peters는 another problem with your code in his answer을 가리 킵니다.

+0

감사합니다. 덕분에 많은 도움이되었습니다. – foushad

6

표현식 'null' * (len(maxSS7) - len(row))중 하나 인 잠재적으로 매우 긴 문자열을 만듭니다.

사용

row.extend('null' for _ in xrange(maxSS7 - len(row))) 

대신. 생성자 표현식을 사용하면 row을 확장하기 위해 여분의 목록 객체를 만들지 않아도됩니다.

>>> ['null' * 2] 
['nullnull'] 
>>> ['null' for _ in xrange(2)] 
['null', 'null'] 

하지만 if 문 잘못된 일을 시험하고있다으로 .extend 전화 자체가 도달되지 않습니다; 로 변경 :

if len(row) < maxSS7: 

maxSS7하면 aready 번호 (긴리스트의 길이)이고; 그 길이에 해당하는 번호를 물어 보는 것은 당신이 찾고 있던 것이 아닙니다.

+0

이것은 문제를 해결하지 못했지만 그 오류를 알아 줘서 고맙습니다! – foushad

관련 문제