zip
기능을 사용하여 두 목록의 요소를 그룹화 할 수 있습니다.
with open("Input.txt") as inf:
for line in inf:
print zip(*map(lambda x: map(int, x.split(":")), line.split()))
출력
[(1, 2), (0, 120)]
[(1, 2), (1, 131)]
[(1, 2), (2, 26)]
[(1, 2), (3, 568)]
[(1, 2), (4, 176)]
[(1, 2, 3), (5, 28, 549)]
[(1, 2), (6, 17)]
[(1, 2, 3, 4, 5), (7, 6, 217, 401, 636)]
[(1, 2), (8, 139)]
제안 : 그것은 내가 위의 코드에 나와있는 것처럼, with
키워드를 사용하여 파일을 열하는 것이 좋다. 왜냐하면 프로그램이 예외로 실패하더라도 리소스를 닫거나 해제하는 것을 처리 할 것이기 때문입니다.
는 설명 : zip
이후
은 함수 호출의 파라미터는 먼저 평가된다. 나중에 *
에 올 수 있습니다. map(lambda x: map(int, x.split(":")), line.split())
을 사용하여 line.split()
(공백 문자로 문장을 분할하고 목록을 반환)에 의해 반환 된 문자열 목록의 모든 요소에 람다 함수 lambda x: map(int, x.split(":"))
을 적용합니다.
각각의 모든 스플릿 단어는 람다 함수에 하나씩 매개 변수로 전달됩니다. 첫 번째 사례를 취하면 먼저 "1:0"
이 x
이라는 람다 함수로 보내집니다. :
을 기반으로 분할하면 ["1", "0"]
목록이 제공되고 그 다음에 을 부여하면 int
함수가 적용됩니다. 따라서 모든 라인을 분할하고 람다를 적용하면 결과는 다음과 같습니다.
[[1, 0], [2, 120]]
[[1, 1], [2, 131]]
[[1, 2], [2, 26]]
[[1, 3], [2, 568]]
[[1, 4], [2, 176]]
[[1, 5], [2, 28], [3, 549]]
[[1, 6], [2, 17]]
[[1, 7], [2, 6], [3, 217], [4, 401], [5, 636]]
[[1, 8], [2, 139]]
이제 각 목록에 두 개의 요소가 있습니다. 우리는 나중에 논의하기로 결정 *
기억이 목록을 풀고이
zip([1, 0], [2, 120])
처럼 zip
함수에 매개 변수 등의 모든 요소를 통과 이제 zip
모든 첫 번째 요소를 선택하고 목록에 넣어 것입니다 , 그리고 두 번째 요소를 모두 선택하여 목록에 넣는 등의 작업을 수행합니다.
이것은 우리가 예상 한 답변을 얻는 방법입니다.
감사합니다. 지금 올바르게 작동합니다. 파이썬에서는 초보자입니다. zip, map 및 lambda에 대한 간단한 설명을 주시겠습니까? – user3041107
@ user3041107 지금 업데이트 된 답변을 확인하십시오. 나는 약간의 설명을 추가했다. – thefourtheye
@ user3041107 또한 도움이된다면 [대답 대답] (http://meta.stackexchange.com/a/5235/235416)을 고려해주십시오. – thefourtheye