목록에있는 튜플의 값에 액세스


88
[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]

이 목록 내의 각 튜플에서 두 번째 값을 어떻게 반환합니까?

원하는 출력 :

[2, 3, 5, 4, 7, 7, 8]

답변:


100

A의 지능형리스트 .

[x[1] for x in L]

52
나는 이것이 간단한 질문이라는 것을 이해합니다. 그렇게 엘리트주의적인 장소인가? 질문을 검색해보세요. 결과가 필요하지 않습니다. 나는 파이썬을 어려운 방법으로 배우고 거기에서 이것을 찾지 못했습니다. 파이썬을 배우기위한 최선의 접근 방식에 대해 전에 질문을했는데 만장일치로 기본 책을 구하고 그냥 뛰어 드는 것입니다. 검색 한 책이나 온라인 자료에서 해결책을 찾을 수 없을뿐만 아니라 저를 좌절시킵니다. 지금까지? 또한 귀하의 의견은 실제로 도움이되지 않으며 신규 회원이 SO에 게시하지 못하도록합니다.
super9

1
@Nai : Python 튜토리얼 docs.python.org/tutorial/index.html 을 읽는 것이 좋습니다 . 일반적으로 문서는 매우 좋습니다. 그리고 때때로, 하나는 시도한다)
펠릭스 클링

19
튜플 목록의 항목에 액세스 할 목적으로 "튜플의 항목 액세스"를 검색했습니다. 당신의 질문에 저를 데려왔으니 감사합니다. 저는 Python을 처음 접했고 특히 직관적 인 답을 찾지 못했지만 그게 바로 저입니다!
Patrick Williams

7
SO의 전체 개념은 질문에 대한 답을 더 쉽게 찾을 수 있도록하는 것이라고 생각했습니다. 질문이 유효하기 위해 특정 난이도를 가져야하는 이유는 무엇입니까? 좋은 질문, 좋은 대답입니다.
Sceluswe

3
훌륭한! 짧고, 예리하며, 요점 질문에 대한 짧고 예리한 대답입니다. 둘 다 내 하루를 만들었습니다!
Eric M

82

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 장 이나 이해에 관한 자료를 읽는데 시간을 할애 할 것 입니다. 행운을 빕니다.


4
2.x에서는 x마지막 값이 바인딩 된 LC 외부에 존재합니다. 이것은 3.x에서 수정되었습니다.
Ignacio Vazquez-Abrams 2011 년

나는 이것을 몰랐다. 정보에 대해서 감사드립니다.
gary

4
@gary 굉장한 설명. 특히 L이 무엇을 의미하는지 지적 해 주셔서 감사합니다.
Patrick Williams

@PatrickWilliams 피드백에 감사드립니다. 도움이되어 기쁩니다. 당신도 할 수 [x[1] for x in [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]]있지만 눈에는 쉽지 않습니다.
gary

5

목록 이해는 절대적으로이를 수행하는 방법입니다. 또 다른 방법으로 해야 더 빠를 수있다 mapitemgetter.

import operator

new_list = map(operator.itemgetter(1), old_list)

OP가 Google에서 답변을 찾을 수 없다는 의견에 대한 응답으로 매우 순진한 방법을 지적하겠습니다.

new_list = []
for item in old_list:
    new_list.append(item[1])

이것은 다음을 사용합니다.

  1. 빈 목록을 참조하는 변수 선언.
  2. for 루프.
  3. append목록 에서 메서드를 호출합니다 .

누군가가 언어를 배우려고하는데이 기본적인 부분을 스스로 모을 수 없다면, 그것을 연습 으로 보아야합니다. 없다면, 그것을 20 시간이 걸리더라도 스스로해야합니다.

원하는 것을 생각 하고 사용 가능한 도구 와 비교하는 방법을 배워야합니다 . 두 번째 답변의 모든 요소는 기본 자습서에서 다루어야합니다. 하나를 읽지 않고는 프로그래밍을 배울 수 없습니다 .


2

또는 다음을 사용할 수 있습니다 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]
>>> 

1

다음을 사용하여 시퀀스 풀기를 사용할 수도 있습니다 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))

0
a = [(0,2), (4,3), (9,9), (10,-1)]
print(list(map(lambda item: item[1], a)))

1
다른 사람들이 검색하는 것을 더 쉽게 이해할 수 있도록 답변을 조금 설명해주세요.
herrbischoff
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.