[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]
このリスト内の各タプルから2番目の値を返すにはどうすればよいですか?
必要な出力:
[2, 3, 5, 4, 7, 7, 8]
回答:
[x[1] for x in L]
イグナシオの答えはあなたが望むものです。ただし、Pythonも学んでいる人がいるので、それを分析してみましょう...前述のように、これはリスト内包表記です(たとえば、DiveIntoPython3で説明されています)。ここにいくつかのポイントがあります:
[x[1] for x in L]
[]
コード行の周りの'に注意してください。これらはリストを定義するものです。これは、このコードがリストを返すことを示しているので、そのlist
タイプです。したがって、この手法は「リスト内包」と呼ばれます。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]
各タプルの2番目のアイテムx[0]
を指しますが、最初のアイテムのそれぞれを指します。質問をする前にどれだけ問題を試みたかを知るのは難しいですが、おそらくあなたは理解に精通していなかったのでしょうか?DiveIntoPythonの第3章、または内包表記に関するリソースを読むのに少し時間を費やします。幸運を。
x
LCの外部に存在し、最後の値がそれにバインドされます。これは3.xで修正されています。
[x[1] for x in [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]]
が、それは目にはそれほど簡単ではありません。
リスト内包表記は絶対にこれを行う方法です。もう一つの方法べきで速いことがある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])
これは以下を使用します:
append
リストのメソッドを呼び出す。誰かが言語を学ぼうとしていて、これらの基本的な部分を自分でまとめることができない場合、彼らはそれを演習と見なし、 20時間かかっても自分で行う必要があります。
自分が何を望んでいるのかを考え、それを利用可能なツールと比較する方法を学ぶ必要があります。2番目の回答のすべての要素は、基本的なチュートリアルで説明する必要があります。あなたは1つを読まずにプログラミングを学ぶことはできません。
または、次を使用できます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]
>>>
a = [(0,2), (4,3), (9,9), (10,-1)]
print(list(map(lambda item: item[1], a)))