[python]リストを分割する

リストを何個ずつで分割するかを指定

リスト[0,1,2,3,4,5,6,7,8,9]があるときに3つずつ要素を取り出したいときは次のようにします。
#個数で分割する場合

#元のリスト
list_data=list(range(10))
#何個ずつのリストに分割するか
n=3
for i in range(0,len(list_data), n):
	print(list_data[i:i+n])
#結果
#[0, 1, 2]
#[3, 4, 5]
#[6, 7, 8]
#[9]
for文中のスライスで3つずつ要素を取り出していきます。
list_data[0,3]=[0,1,2]
list_data[3,6]=[3,4,5]
list_data[6,9]=[6,7,8]
list_data[9,10,11]=[9]
と順次取り出します。

リストを何分割するかで指定

また何個ずつではなく分割する個数を指定したい場合は以下のようにします。
#分割する数を指定する場合
import math

#元のリスト
list_data=list(range(12))
#分割する数
n=3
#分割する数から何個ずつに分割すればいいかを求める
#math.ceilは切り上げる関数である
m=math.ceil(len(list_data)/n)
for i in range(0,len(list_data),m):
	print(list_data[i:i+m])
#結果
# [0, 1, 2, 3]
# [4, 5, 6, 7]
# [8, 9]
リストの要素数len(list_data)と分割する個数3から何個ずつ取り出せばいいのかを求めてmにしています。
何個ずつ取り出せばいいのかがわかればあとはスライスを使って同じように出来ます。

リストを分割する関数を作る

リストを分割する関数を作る場合は以下のようにします。
#リストを何個ずつで分割するかを指定
#list_dataに分割したいリストを指定する
#nに何個ずつ分割するかを指定する
def split_list(list_data,n):
	if(not isinstance(list_data,list)):
		return(f"type:{type(list_data)} リストではありません。")
	#nが0以下又は整数でないときはエラーを返す
	if(n<=0 or not isinstance(n,int)):
		return(f"n:{n} 整数でないか0以下です。")
	#リストを初期化
	list_data_2=[]
	for i in range(0,len(list_data), n):
		#スライスでリストを分割していく
		list_data_2.append((list_data[i:i+n]))
	return(list_data_2)

#リストを何分割するかを指定
#list_dataに分割したいリストを指定する
#mに何分割するかを指定する
def split_list_2(list_data,n):
	#nが0以下又は整数でないときはエラーを返す
	if(n<=0 or not isinstance(n,int)):
		return(f"n:{n} 整数でないか0以下です。")
	import math
	m=math.ceil(len(list_data)/n)
	return(split_list(list_data,m))

list_data=['a','b','c','d','e','f','g','h','i','j','k','l','m','n']
#リストを3つずつに分割する
print(split_list(list_data,3)) #[['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i'], ['j', 'k', 'l'], ['m', 'n']]
#リストを4つずつに分割する
print(split_list(list_data,4)) #[['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h'], ['i', 'j', 'k', 'l'], ['m', 'n']]
#リストを5つずつに分割する
print(split_list(list_data,5)) #[['a', 'b', 'c', 'd', 'e'], ['f', 'g', 'h', 'i', 'j'], ['k', 'l', 'm', 'n']]
#リストを3分割する
print(split_list_2(list_data,3)) #[['a', 'b', 'c', 'd', 'e'], ['f', 'g', 'h', 'i', 'j'], ['k', 'l', 'm', 'n']]
#リストを4分割する
print(split_list_2(list_data,4)) #[['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h'], ['i', 'j', 'k', 'l'], ['m', 'n']]

ページ情報
タイトル
[python]リストを分割する
URL
https://www.nomuramath.com/nnt52esy/
SNSボタン