
[code]

    l = [(5,6),7,8,9]
    
[/code]

というリストから6という値を取り出したい場合、どうすればいいのでしょうか?

[code]

    print l[0:1]
    
[/code]

とすると `[(5,6)]` となりますし、  
`l.index(6)` とすると `ValueError: 6 is not in list` となります

リストのリストからスライスして表示する場合はどうしたらよいのでしょう?


CC BY-SA 3.0
2015-12-17T04:45:16.537
20094
2016-10-24T01:42:54.500
2016-10-19T11:54:15.990
8000
13714
question
python
リストの入れ子から任意の値を取り出す


`l[0]` が `(5,6)` という tuple ですので，これの2つめを見ればいいです．

[code]

    print l[0][1]
    # -> 6
    
[/code]

あるいは（今回の使い方でこちらが望ましい状況は限られるかもしれませんが），tuple や list のたぐいは適当にばらして([sequence
unpacking](https://docs.python.org/3/tutorial/datastructures.html#tuples-and-
sequences))くれます．

[code]

    (x,y), *rest = l
    print y
    # -> 6
    
[/code]


CC BY-SA 3.0
2016-10-21T05:11:09.150
29763
2016-10-21T05:11:09.150
2901
20094
answer


`l[0:1]` は Python のスライス文で、ある値を取り出せることはできません。単なる `l = [(5, 6), 7, 8, 9]` から 6
を取得するのは、`l[0][1]` でよろしいです。

なお、リストやタプルや辞書型が混合するデータ構造から任意深度の要素を取得することなら、他の方法を必要はです。

例えば、あるリスト `l` の入れ子から、`l[a][b][c]...[x]` で要素を取り出したいが、インデックス `idxlist = [a, b,
c, ..., x]` の数を事前にわからない状況となると、下記のような `for` 文を用いたらよろしいです

[code]

    l = [(5,6),7,8,9]
    idxlist = [0, 1]
    
    found_element = l
    for index in idxlist:
        found_element = found_element[index]
    print found_element # 6
    
[/code]

あるいは、[`reduce`
関数](https://docs.python.org/2/library/functions.html#reduce)でこうして作成するのも良いです。

[code]

    print reduce(lambda obj, key: obj[key],
                 idxlist,
                 l)
    
[/code]


CC BY-SA 3.0
2016-10-21T09:15:42.373
29769
2016-10-24T01:42:54.500
2016-10-24T01:42:54.500
18621
18621
20094
answer