2010-12-06 2 views
1

중첩 목록을 파이썬에서 처리하는 방법은 무엇입니까? 문법을 알아 내는데 문제가 있습니다. 예 :중첩 목록 수정

>>> l = [[1, 2, 3], [5, 6, 7]] 

이 목록의 모든 요소를 ​​정사각형으로 만들려고합니다.

[m*m for m in l] 

는하지만 그 작동하지 않고 던졌습니다 : 나는 시도

TypeError: can't multiply sequence by non-int of type 'list'

을하기 때문에 내가 추측 중첩 된 목록의?

어떻게 수정합니까? 당신이 필요로하는 무엇

답변

7
>>> l = [[1, 2, 3], [5, 6, 7]] 
>>> [[e*e for e in m] for m in l] 
    |-nested list-| 
    |---- complete list ---| 
[[1, 4, 9], [25, 36, 49]] 
+0

처음 인 경우 +1 : – khachik

+0

고마워요! 때로는 운이 좋아 지기도합니다. – user225312

+0

+1 목록 작성 및 아스키 예술 용) – Ant

1
[[1,2,3],[4,5,6]] != [1,2,3,4,5,6]  

[map(lambda x: x *x,sl) for sl in l] #List comprhension 
+0

나는 어디에서나 내가 할 수있는 람다를 피한다! 하지만 +1. – user225312

0

는 재귀 함수,이 같은 것입니다 :

def square(el): 
    if type(el) == list: 
     return [square(x) for x in el] 
    else: 
     return el**2; 

차라리 여기 type(el) == list의 정확성에 얻을 것입니다,하지만 당신은 요점을 얻을.

물론 이것은 목록 이해력으로도 가능합니다. 많은 사람이 포인터를 가지고 있기 때문에 은 구조가 항상 동일하다는 것을 의미합니다. 이 재귀 함수는 모든 수준의 재귀를 처리 할 수 ​​있으며 목록과 숫자를 모두 포함하는 목록을 처리 할 수 ​​있습니다.

+0

재귀는 다양한 깊이의 나무에 대해 매우 중요하지만 여기서는 적절하게 필요하지 않습니다. – delnan

0

이처럼 보이도록 답을 원하는 가정 :

[[1, 4, 9], [25, 36, 49]] 

당신은 이런 식으로 뭔가를 할 수 :

l = [[1, 2, 3], [5, 6, 7]] 

for x in range(len(l)): 
    for y in range(len(l[x])): 
     l[x][y] = l[x][y] * l[x][y] 

print l 

물론, 지능형리스트의 대답은 더 좋다.