

Python3の配列操作について質問させてください。

指定したインデックスの配列を作りたいのですが、どうしてよいか分かりません。

配列Aから配列Aの3,6,9番目で構成する配列Bを作成したいのですが、良いアイディアをお持ちの方はおられませんか？

配列A =[1,2,3,4,5,6,7,8,9,10]

配列B=[4,7,10]

なるべく,Forやappendなどは使わない方法で一括で行いたいのですが・・・

delやpopで複数の範囲を扱えるといいのにな。

以上、よろしくお願いします。


CC BY-SA 3.0
2017-09-30T07:10:23.833
38318
2020-01-17T01:26:45.470
25607
question
python array
Python3の配列操作　指定したインデックスの配列を作りたい。


すでに解説されている[スライス](https://docs.python.jp/3/reference/expressions.html?highlight=%E3%82%B9%E3%83%A9%E3%82%A4%E3%82%B9#slicings)でうまくいかない場合は「一括」といえるか解りませんが、[内包表記](https://docs.python.jp/3/tutorial/datastructures.html#list-
comprehensions)があります。質問の例ですと以下のようになります。

[code]

    # [元のリスト[i] for i in 抜き出すインデックスたち]
    
    a = [1,2,3,4,5,6,7,8,9,10]
    b = [a[i] for i in (3, 6, 9)]
    print(b)
    # => [4, 7, 10]
    
[/code]

（日本語で「n番目」というと曖昧さがあるので注意が必要だと思います。Python などは最初の要素のインデックスが 0
ですが、日本語ではそれを「1番目」と言うことも多いのではないでしょうか）


CC BY-SA 3.0
2017-09-30T08:03:34.597
38321
2017-09-30T08:03:34.597
3054
38318
answer


> Forやappendなどは使わない方法で一括で行いたい

Forやappendを使わないで任意の配列を取り出したいならこれで良いのでは。

[code]

    a = [1,2,3,4,5,8,7,8,9,10]
    b = [a[3],a[6],a[9]]
    print(b)
    #=> [4,7,10]
    
[/code]


CC BY-SA 4.0
2017-10-01T02:20:30.327
38333
2020-01-17T01:26:45.470
2020-01-17T01:26:45.470
3060
23008
38318
answer


`operator.itemgetter` で実現できます。

<https://docs.python.org/ja/3/library/operator.html#operator.itemgetter>

[code]

    In [1]: A = [1,2,3,4,5,6,7,8,9,10]
    
    In [2]: B = [4,7,10]
    
    In [3]: from operator import itemgetter
    
    In [4]: list(itemgetter(3, 6, 9)(A))
    Out[4]: [4, 7, 10]
    
[/code]


CC BY-SA 4.0
2020-01-17T01:25:20.267
62309
2020-01-17T01:25:20.267
62
38318
answer