2017-04-03 1 views
0

현재 파이썬에서 아래 코드를 실행 중입니다. 내가 알아야 할 것은 라인 V=max(u(j) + y for y in set2)y의 값을 저장하는 방법입니다. 이 행은 set1 및 set2의 각 값의 최대 합계를 가져옵니다. 즉, 코드의 첫 번째 반복에 대해 최대 값이 3 (set1의 경우 1이고 set2의 경우 2) 인 경우 어딘가에 2라는 숫자를 저장하고 싶습니다.파이썬 하나의 라인 루프 두 함수

set1=[1,2,3] 
    set2=[1,2]  
    u=lambda c: c**(1) 
    for j in set1: 
     V=max(u(j) + y for y in set2) 
     print (V) 
    else: 
     V=0 

하나의 해결책은 추가 루프를 수행하는 것이지만 한 줄로 수행하는 것이 좋습니다.

감사합니다,

+1

... 예상되는 결과는 무엇입니까? 그런 식으로'lambda '를 사용하지 마십시오. 익명 함수를 * 이름 짓기 위해 * 익명 함수 구문을 사용하지 말고 그냥 일반 함수 정의를 사용해야합니다. –

+0

조언 해 주셔서 감사합니다! 현재 출력은 set1의 각 요소와 set2의 최대 합계 인 3,4,5입니다. 튜플 (3,2,1), (4,2,2), (5,2,3)을 얻고 싶습니다. 합계와 그 합을 구성하는 각 요소가 포함됩니다. –

답변

0

당신은 어떤 용기에 따라 y을 유지할 수 있습니다 (A tuple 여기에 자연 선택) : 여담으로

>>> set1 = [1,2,3] 
>>> set2 = [1,2] 
>>> def u(c): return c**(1) 
... 
>>> for j in set1: 
...  V, y = max((u(j) + y, y) for y in set2) 
...  print(V, y) 
... 
3 2 
4 2 
5 2 

, 나는 당신의 다른 절은 가정 무엇인지 전혀 모른다 해야 할 일은 있지만 항상 실행된다는 것을 알기를 바랍니다.

또한 왼쪽에있는 y은와 아무 관련이 없습니다. 생성자 표현식에이 있습니다.이 생성기 표현식에는 자체 범위가 있습니다. 내가 원하는대로 쉽게 호출 할 수있었습니다.

>>> for j in set1: 
...  V, fish = max((u(j) + y, y) for y in set2) 
...  print(V, fish) 
... 
3 2 
4 2 
5 2