당신은 그래서 그냥 A
각 중첩 된 목록에 sum
을 적용, 내부리스트 A
를 합산됩니다
def degree(A):
return map(sum, A)
당신은 또한 당신이 필요 여부에 따라 지능형리스트 또는 발전기 식을 (사용을 고려할 수 (파이썬 2 목록을 생성에서, 파이썬 3가 느리게 작동 map()
)을 유유히 결과를 생산 :
def degree(A):
# returns a list
return [sum(row) for row in A]
def degree(A):
# returns a generator
return (sum(row) for row in A)
당신은 그렇지 않으면 생성 할 수 i
및 j
은 이고 직교 곱이고, 사용하는 문자는 itertools.product()
이고; 이 대신 itertools.starmap()
를 사용하여 해결 될 수
from itertools import product
map(lambda ij: A[ij[0]][ij[1]] ** 2, product(range(len(A)), 2))
: 그러나, 당신이 호출지도에 정수의 튜플 전달 될 것
from itertools import product, starmap
starmap(lambda i, j: A[i][i] ** 2, product(range(len(A)), 2))
어느 것이 합을 생산; 나는 가장 깊은 값의 제곱을 대신 생성하는 lambda
을 시연 했으므로 행 사이를 구별하지 않고 제곱 된 모든 값의 긴 시퀀스 하나를 얻습니다. 매핑이 작동하는 방식으로 입력 당에서 처리되는 항목 당 값 이 생성됩니다.
네스트map()
을 호출 할 수도 있습니다. 외부 map()
의 호출에 내부 map()
을 넣어 :
map(lambda r: map(lambda v: v ** 2, r), A)
하지만 그때가있는 한, 합산은,이 시나리오에서 이해가되지 않습니다 다시 파이썬 3에서 게으른 개체의 게으른 순서를 생산하고 있습니다 결과가 누적되지 않습니다.
의 결과는 시퀀스 전체에서 functools.reduce()
function을 사용하려고합니다. callable은 실행 결과와 시퀀스의 다음 값에 대해 callable을 적용합니다.당신은 당신의 lambda x, y: x + y
기능과 map()
와 합을 생성 할 수 있습니다 :
이 map(lambda r: reduce(lambda x, y: x + y, r, 0), A)
그러나 그냥를 합산 들어, reduce(lambda x, y: x + y, <iterable>, 0)
구문은 맞춤법 sum(<iterable>)
단지 자세한 느린 방법입니다.
두 개 이상의 루프가있는 것보다 훨씬 많은 작업을 수행 할 수 있습니다. 또한 내부 루프에 합계를 생성 할 수도 있습니다. –
'map (sum, A)'과 같은 효과를 얻을 수 있습니다. 그런데 아무 것도 중첩 할 필요가 없습니다. –
'map()'에서 여러분의 시도는 당신의 맥락에서 의미가 없습니다; 아마도'reduce()'를 생각하고 있을까요? 'map()'은 여러개의 iterable을 하나의 입력으로 받아들이지 만,'map (..., A)'는 오직 ** 하나의 ** 입력만을 가지고 있으므로 람다를위한 * 하나의 인수 만 갖습니다. 그런 다음 합계가 아닌 일련의 결과를 작성합니다. 'reduce()'는 함수와 입력 시퀀스를 반복적으로 호출하여 단일 결과를 생성합니다. –