[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]
이 목록 내의 각 튜플에서 두 번째 값을 어떻게 반환합니까?
원하는 출력 :
[2, 3, 5, 4, 7, 7, 8]
답변
A의 지능형리스트 .
[x[1] for x in L]
답변
Ignacio의 대답은 당신이 원하는 것입니다. 그러나 파이썬을 배우는 사람으로서 여러분을 위해 해부 해 보겠습니다 … 언급했듯이, 그것은 목록 이해입니다 ( 예를 들어 DiveIntoPython3 에서 다룹니다 ). 다음은 몇 가지 사항입니다.
[x[1] for x in L]
- 통지
[]
코드의 라인 주위의합니다. 이것이 목록을 정의하는 것입니다. 이것은이 코드가 목록을 반환하므로list
유형이 있음을 나타냅니다. 따라서이 기술을 “목록 이해”라고합니다. - L은 원래 목록입니다. 따라서
L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
위 코드를 실행하기 전에 정의해야합니다 . x
액세스를 시도 – 오직 이해에 존재하는 변수x
이해력의 외부 또는 유형을type(x)
위의 라인을 실행 해, 당신을 말할 것이다 후에NameError: name 'x' is not defined
반면,type(L)
반환<class 'list'>
.x[1]
각 튜플 의 두 번째 항목을x[0]
가리키고 첫 번째 항목 각각을 가리 킵니다.- 따라서이 코드 줄은 문자 그대로 “목록 L의 모든 튜플에 대해 튜플의 두 번째 항목을 반환합니다”라고 읽습니다.
질문하기 전에 문제를 얼마나 시도했는지 말하기는 어렵지만 이해에 익숙하지 않았을 수도 있습니다. 나는 DiveIntoPython의 3 장 이나 이해에 관한 자료를 읽는데 시간을 할애 할 것 입니다. 행운을 빕니다.
답변
목록 이해는 절대적으로이를 수행하는 방법입니다. 또 다른 방법으로 해야 더 빠를 수있다 map
및 itemgetter
.
import operator
new_list = map(operator.itemgetter(1), old_list)
OP가 Google에서 답변을 찾을 수 없다는 의견에 대한 응답으로 매우 순진한 방법을 지적하겠습니다.
new_list = []
for item in old_list:
new_list.append(item[1])
이것은 다음을 사용합니다.
- 빈 목록을 참조하는 변수 선언.
- for 루프.
append
목록 에서 메서드를 호출합니다 .
누군가가 언어를 배우려고하는데이 기본적인 부분을 스스로 모을 수 없다면, 그것을 연습 으로 보아야합니다. 없다면, 그것을 20 시간이 걸리더라도 스스로해야합니다.
원하는 것을 생각 하고 사용 가능한 도구 와 비교하는 방법을 배워야합니다 . 두 번째 답변의 모든 요소는 기본 자습서에서 다루어야합니다. 하나를 읽지 않고는 프로그래밍을 배울 수 없습니다 .
답변
또는 다음을 사용할 수 있습니다 pandas
.
>>> import pandas as pd
>>> L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
>>> df=pd.DataFrame(L)
>>> df[1]
0 2
1 3
2 5
3 4
4 7
5 7
6 8
Name: 1, dtype: int64
>>> df[1].tolist()
[2, 3, 5, 4, 7, 7, 8]
>>>
또는 numpy
:
>>> import numpy as np
>>> L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
>>> arr=np.array(L)
>>> arr.T[1]
array([2, 3, 5, 4, 7, 7, 8])
>>> arr.T[1].tolist()
[2, 3, 5, 4, 7, 7, 8]
>>>
답변
다음을 사용하여 시퀀스 풀기를 사용할 수도 있습니다 zip
.
L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
_, res = zip(*L)
print(res)
# (2, 3, 5, 4, 7, 7, 8)
이것은 또한 _
버려진 첫 번째 요소에서 튜플 을 만듭니다 . 두 번째 만 추출 할 수 있지만 더 자세한 정보는 다음과 같습니다.
from itertools import islice
res = next(islice(zip(*L), 1, None))
답변
a = [(0,2), (4,3), (9,9), (10,-1)]
print(list(map(lambda item: item[1], a)))