web-dev-qa-db-ja.com

リストにあるタプルの値にアクセスする

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

このリスト内の各タプルから2番目の値を返すにはどうすればよいですか?

望ましい出力:

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

リスト内包表記 を使用します。

[x[1] for x in L]

イグナシオの答えはあなたが望むものです。しかし、誰かがPythonを学習しているので、それを分析してみましょう...前述のように、これはリスト内包表記です(たとえば、 DiveIntoPython で説明されています)。ここにいくつかのポイントがあります:

[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]は各タプルのsecond項目を指しますが、x[0]は最初の各項目を指します。
  • したがって、このコード行は、「リストLのすべてのタプルについて、タプルの2番目の項目を返す」という文字通りの読み取りを行います。

質問する前にどれだけ問題を試みたかを伝えるのは難しいですが、おそらくあなたは理解に慣れていないだけでしょうか? DiveIntoPythonの第3章 、または理解に関するリソースを読むのに少し時間を費やします。幸運を。

72
gary

リストを理解することは、絶対にこれを行う方法です。 を高速化する別の方法は、mapおよびitemgetterです。

import operator

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

OPがグーグルで答えを見つけることができなかったというコメントに応えて、私はそれを行うための非常に素朴な方法を指摘します。

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

これは以下を使用します:

  1. 空のリストを参照する変数を宣言します。
  2. Forループ。
  3. リストのappendメソッドを呼び出します。

誰かが言語を学ぼうとしていて、これらの基本的な部分を自分で組み立てることができない場合、彼らはそれを演習として見なければなりません時間。

人が何を望んでいるかを考え、それを利用可能なツールと比較する方法を学ぶ必要があります。 2番目の回答のすべての要素は、基本的なチュートリアルで説明する必要があります。 読むことなくプログラムすることを学ぶことはできません

6
aaronasterling

または、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
U10-Forward

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)

これは、破棄された最初の要素からタプル_も作成します。 2番目だけを抽出することは可能ですが、より冗長です:

from itertools import islice

res = next(islice(Zip(*L), 1, None))
1
jpp