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

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

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

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

Q&A

解決済

3回答

4647閲覧

python3 任意の数で配列を分割

Untitled_Sample

総合スコア192

Python 3.x

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

0グッド

0クリップ

投稿2018/03/02 15:06

編集2018/03/02 15:21

任意の場所で配列を分割したいです。

python

1 2 3l=[[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]] 4 5y=2 6 7for i in l: 8 #print(i) 9 print(list(zip(*[iter(i)]*int(y))) ) 10 11""" 12[(1, 2), (3, 4), (5, 6)] 13[(1, 2), (3, 4), (5, 6)] 14[(1, 2), (3, 4), (5, 6)] 15"""

2つに分割したいのですが、3つづつになってしまいます。

y=3なら、3分割したいと思ってます。

#y=2の時 期待する出力

python

1[[1,2,3],[4.5,6]] 2[[1,2,3],[4.5,6]] 3[[1,2,3],[4.5,6]]

#y=3の時 期待する出力

python

1[[1,2],[3,4],[5.6]] 2[[1,2],[3,4],[5.6]] 3[[1,2],[3,4],[5.6]]

yが分割するlen要素/y=0に ならない時
[4分割などの場合]
は何もしません。

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

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

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

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

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

LouiS0616

2018/03/02 15:08

『期待する結果』を質問に追記してください。
guest

回答3

0

python

1from more_itertools import chunked 2 3l = [[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]] 4 5print("------") 6y = 2 7for i in l: 8 if len(i) % y == 0: 9 print(list(chunked(i, y))) 10 11print("------") 12y = 3 13for i in l: 14 if len(i) % y == 0: 15 print(list(chunked(i, y))) 16 17print("------") 18y = 4 19for i in l: 20 if len(i) % y == 0: 21 print(list(chunked(i, y)))

イメージ説明

参考情報

  • python2でリストをn個ずつのサブリストに分割する

http://y0m0r.hateblo.jp/entry/20140405/1396674065

投稿2018/03/03 00:42

katoy

総合スコア22324

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

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

退会済みユーザー

退会済みユーザー

2018/03/03 01:09

コンソールで pip install more-itertools としてからですね。 このモジュールは知りませんでした。
guest

0

単純なスライスは都合悪いんですか?

Python

1l = [[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]] 2 3y=2 4 5for i in l: 6 step = len(i) // y 7 print([i[step*idx: step*(idx+1)] for idx in range(0, y)]) 8 # print([i[idx:idx+step] for idx in range(0, len(i), step)] # こちらでも同じ。コメントを受けて追記

投稿2018/03/02 15:35

編集2018/03/02 22:00
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

LouiS0616

2018/03/02 16:35

print([i[idx:idx+step] for idx in range(0, len(i), step)]) の方がより素直な気もします。
退会済みユーザー

退会済みユーザー

2018/03/02 22:01

回答に追記しておきました。
guest

0

ベストアンサー

分割幅を計算すれば良いだけでは?

Python

1my_list = [ 2 [1, 2, 3, 4, 5, 6], 3 [1, 2, 3, 4, 5, 6], 4 [1, 2, 3, 4, 5, 6] 5] 6 7y = 2 8for row in my_list: 9 print(list(zip(*[iter(row)]*(len(row)//y))))

実行結果 Wandbox

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

とは言え流石に煩雑になってきたので、関数などに整理する必要がありそうですね。

投稿2018/03/02 15:21

LouiS0616

総合スコア35660

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問