실제로는 기능에 따라 다릅니다. 먼저
: 기능 f
다음 각 요소를 수용 경우 map()
을 중첩 호출해야합니다
이
m = [[6, 0, 8, 0], [2, 0, 12, 0], [8, 0, 6, 0], [10, 0, 4, 0]]
map(f, m)
둘째 : 기능이 f
말을하면 "목록은 완전한 행"당신은 사용할 수 있습니다 받아 아래처럼 :
map(lambda r: map(f, r), m)
이렇게하려면 목록 압축 :을 사용할 수도 있습니다. 당신이 functools.partial
확인이 example을 사용할 수 있습니다처럼3210
[map(f, r) for r in m] # I prefer this
는 다른 트릭이있다. 응답으로
from functools import partial
newf = partial(map, f)
map(newf, m)
편집는 언급합니다 :
사실 중요한 것은 내가 행의 요소를 조작하는 방법을 알고 싶은 것입니다. 그렇다면 예를 들어에 대한 모든 요소를 추가 할 수도 있습니다. [2, 4, 0, 8]
을 [14, 0, 0, 0]
으로 만듭니다.
첫째, 당신은 단지 14
— 합 왜 안 출력, [14, 0, 0, 0]
에 목록 [2, 4, 0, 8]
변환 당신이 당신의 프로그램의 알고리즘/디자인을 개선 할 수 있는지 확인하고 싶어 의심하는 이유가 있습니다.
어쨌든, 파이썬에서 우리는 합() 함수를 가지고, 문서 sum(iterable[, start])
, 예 (의견을 읽고) 읽기 : 당신이 m
같은 "목록의 목록을"통과하고 싶은 경우에 따라서
>>> row = [2,4,0,8]
>>> sum(row) # just outputs sum of all elements, in rows
14
을 (당신은에 게시
>>> m = [[6, 0, 8, 0], [2, 0, 12, 0], [8, 0, 6, 0], [10, 0, 4, 0]]
>>> map(sum, m) # call sum for each row (a list) in `m`
[14, 14, 14, 14] # sum of all individual list's elements
을하지만 당신은 목록을 만들기를 원하는 경우 다음 질문처럼 당신이 다음과 같이 합 +
(목록 합칠) 연산자를 사용할 수 있습니다 :
0 질문) 당신은
map(sum, m)
은 아래 참조 사용할 수 있습니다
>>> row = [2, 4, 0, 8]
>>> [sum(row)] + [0,] * (len(row) -1)
[14, 0, 0, 0]
>>>
이 코드 조각을 이해하려면
[sum(row)]
이 행 — [14]
의 합 단일 요소의 목록을 의미한다.
[0,] * (len(row) -1)
은 행의 원소 개수 후 길이 하나 이하의 제로의 목록을 만들고, 코드 예 이하 확인 :
>>> row = [2, 4, 0, 8] # 4 elements
>>> [0,] * (len(row) -1)
[0, 0, 0] # 3 zeros
>>>
* 표시 연산자 마찬가지로 또한 튜플 문자열을 적용 할 수있다.
위에서 그래서
, 나는 두 개의 별도의 목록을 확인하고 + 모두 최종적으로 아래와 같이 추가 : 이제
>>> row = [2, 4, 0, 8]
>>> [sum(row)] + [0,] * (len(row) -1)
[14, 0, 0, 0] # that is what you wants
를, 각 행 i에 ∈m, 다음을 [sum(row)] + [0,] * (len(row) -1)
표현을 실행하고 싶어 당신은 다음과 map()
와 람다 식을 사용할 수 있습니다 더 나은
>>> map(lambda row: [sum(row)] + [0,] * (len(row) -1), m)
[[14, 0, 0, 0], [14, 0, 0, 0], [14, 0, 0, 0], [14, 0, 0, 0]]
이 lambd하는 것입니다 식이 이름 :
>>> f = lambda r: [sum(r)] + [0,] * (len(r) -1)
>>> f(row)
[14, 0, 0, 0]
다음
map()
를 사용
>>> map(f, m)
[[14, 0, 0, 0], [14, 0, 0, 0], [14, 0, 0, 0], [14, 0, 0, 0]]
내가 내 대답에 처음 몇 줄에 제시된 것처럼. 이것은 깨끗한 해결책 아니다
>>> [f(r) for r in m]
"각 목록의 쌍을 추가하고 싶습니다."- 정확히 무엇을 의미합니까? 예를 들어 줄 수 있습니까? 어떻게 페어를 만들 수 있습니까? –
실제로 중요한 것은 행의 요소를 조작하는 방법을 알고 싶습니다. 그렇다면 예를 들어에 대한 모든 요소를 추가 할 수도 있습니다. [2,4,0,8] 그것을 [14,0,0,0]으로 만듭니다. – Shawn
업데이트 된 답변 읽기. –