質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

5925閲覧

Python:リストを複数のリストに分割したい

Ykkykk

総合スコア140

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

1クリップ

投稿2018/10/25 05:57

リストを複数の別のリストに分割したいです。

Python

1a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 2b = [3, 4, 7]

リストaをリストbに含まれている値の位置で分割していきたいです。

Python

1#b[3]のとき 2c = [1, 2, 3, 4] 3#b[4]のとき 4d = [5] 5#b[7]のとき 6e = [6, 7, 8] 7#残り 8f = [9, 10]

上記の例ですと、以上のような分け方にしたいのですが、皆目見当がつきません。
リストをn個のリストに分割するのではなく、別のリストで与えた値の位置で分割するにはどのようにすればよいのでしょうか?
リストを作るための空のリストをどのように用意しておけばいいのかという点からすでにわかりません。abもあらかじめ要素の数がわからない(bの要素数がaの要素数を超えることはない)ため、空のリストをあらかじめ用意することはできないように思っています。
そもそも以上のような処理は現実的なのでしょうか?
ご教示いただけますと幸いです。よろしくお願いいたします。

kumc_yossi👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

numpy.array_split() を使うとよいと思います。
第1引数のリストを第2引数で指定されたインデックスの直前で分割します。
今回はインデックスの直後で分割するとのことだったので、np.array(b) + 1 としています。

numpy

1import numpy as np 2 3a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 4b = [3, 4, 7] 5 6split_array = np.array_split(a, np.array(b) + 1) 7print(split_array) # [array([1, 2, 3, 4]), array([5]), array([6, 7, 8]), array([ 9, 10])]

投稿2018/10/25 06:29

編集2018/10/25 06:31
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ykkykk

2018/10/25 06:41

ご回答いただきありがとうございます。 numpyを使用してもできるのですね。 この場合、split_array内のリストの要素にアクセスする際は、通常のネストされたリストと同じように添え字で指定することができるのでしょうか?
tiitoi

2018/10/25 06:43

通常のリストとまったく同じ使い方ができます。 print(split_array[0]) # [1 2 3 4] print(split_array[0][1]) # 2
Ykkykk

2018/10/25 06:47

なるほど!よくわかりました。 ありがとうございます!
guest

0

ベストアンサー

python

1a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 2separate = [3, 4, 7] 3 4start = 0 5newArray = [] 6for s in separate : 7 newArray.append(a[start:s+1]) 8 start = s+1 9newArray.append(a[start:]) 10 11print(newArray)

変数を動的に作るのはできないので、配列の中に配列を入れています

array[a:b]というのは配列の中のa番目からb番目の直前までを抜き出すという意味です

投稿2018/10/25 06:12

編集2018/10/25 06:23
yskk

総合スコア257

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ykkykk

2018/10/25 06:40

ご回答いただきありがとうございます。 やはり動的に変数を作ることはできないのですね…。 配列の配列にしてアクセスすることになるということですね。 ありがとうございます!
guest

0

separate[x:y] で [separate[x], ..., separatey[y -1]] を取り出せることを利用します。

sep.py

python3

1a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 2separate = [3, 4, 7] 3 4sp = [0] + [x +1 for x in separate] + [len(a)] 5result = [a[sp[i]:sp[i + 1]] for i in range(len(sp) - 1)] 6print(result)

上のコードでは、 sp = [0, 4, 5, 8, 10] となります。
そして a[0:4], a[4:5], a[5:8], a[8:10] のように取り出していっています。

実行例
イメージ説明

投稿2018/10/26 13:43

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問