Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonでリストをサイズNのチャンクに分割する


ここでは、特定のユーザー入力リストと特定のブレークサイズを用意します。そして、私たちのタスクは、指定されたサイズに従ってリストを分割することです。

方法1

ここでは、yieldキーワードを適用して、中断したところから再び呼び出される関数を有効にします。これが通常の関数との主な違いです。

サンプルコード

A=list()
n=int(input("Enter the size of the List"))
print("Enter the number")
for i in range(int(n)):
   p=int(input("Size="))
   A.append(int(p))
   print (A)
deflist_chunks(l, n):
   for i in range(0, len(l), n):
      yield l[i:i + n]
n=int(input("Enter Chunk Size"))
my_list = list(list_chunks(A, n))
print ("List of Chunks",my_list)

出力

Enter the size of the List 6
Enter the number
Size= 12
[12]
Size= 33
[12, 33]
Size= 11
[12, 33, 11]
Size= 56
[12, 33, 11, 56]
Size= 44
[12, 33, 11, 56, 44]
Size= 89
[12, 33, 11, 56, 44, 89]
Enter Chunk Size 3
List of Chunks [[12, 33, 11], [56, 44, 89]]

方法2

リスト内包表記を使用すると、この問題を1行で解決できます。

サンプルコード

A=list()
n=int(input("Enter the size of the List"))
print("Enter the number")
for i in range(int(n)):
   p=int(input("Size="))
   A.append(int(p))
   print (A)
n=int(input("Enter Chunk Size"))
my_final = [A[i * n:(i + 1) * n] for i in range((len(A) + n - 1) // n )]
print ("List of chunks:",my_final)

出力

Enter the size of the List 6
Enter the number
Size= 23
[23]
Size= 34
[23, 34]
Size= 12
[23, 34, 12]
Size= 56
[23, 34, 12, 56]
Size= 33
[23, 34, 12, 56, 33]
Size= 22
[23, 34, 12, 56, 33, 22]
Enter Chunk Size 3
List of chunks: [[23, 34, 12], [56, 33, 22]]

  1. Pythonでリストのサイズを取得するにはどうすればよいですか?

    リストのサイズを見つけるには、組み込み関数lenを使用します。 Pythonドキュメントの状態: len(arg)は、オブジェクトの長さ(アイテムの数)を返します。引数は、シーケンス(文字列、バイト、タプル、リスト、範囲など)またはコレクション(辞書、セット、またはフリーズセット)。」 lenは組み込みであり、__len__を実装するユーザー定義クラスでも使用できます。したがって、この操作は、__ len__の実装に応じてO(n)またはO(1)になる可能性があります。 例 list1 = [1, 2, "Hello"] print(len(list1)) my_str

  2. Pythonでリストを均等なサイズのチャンクに分割するにはどうすればよいですか?

    リストを同じサイズのチャンクに分割する最も簡単な方法は、スライス演算子を連続して使用し、最初と最後の位置を固定数だけシフトすることです。 次の例では、12個の要素を含むリストがあります。それぞれ長さ4の3つのリストに分割します l=[10,20,30,40,50,60,70,80,90,100,110,120] x=0 y=12 for i in range(x,y,4): x=i print (l[x:x+4]) [10, 20, 30, 40] [50, 60, 70, 80] [90, 100, 110, 120]