Разделить список с n * n элементами на n списков с n элементами в каждом списке

Я пытаюсь придумать функцию, которая принимает вход x и разбивает большой список с количеством элементов x * x в x меньших списков с x элементами в каждом списке. Например:

big_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] def split_list (x): big_list = pairs (x) small_list = [big_list[0:x] for x in range (x)] 

Мой результат должен быть:

 [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] 

но я не понимаю, что вы рекомендуете?

5 Solutions collect form web for “Разделить список с n * n элементами на n списков с n элементами в каждом списке”

Вы можете попробовать следующее:

 big_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] def split_list (x): return [big_list[i:i+x] for i in range(0, len(big_list), x)] print(split_list(4)) 

Вывод:

 [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] 

Сначала вы хотите получить размер с помощью квадратного корня, поэтому для списка размера n вас будет матрица mxm с m = n ** 0.5 . Давайте сначала определим вашу функцию:

 def square(array): n = len(array) m = int(n ** 0.5) 

Поскольку размеры списка должны быть целыми числами, нам нужно вызвать int на результат. Затем мы хотим начать с 0 и считать i до n на m каждый раз, взяв m элементов, начиная с i :

 def square(array): n = len(array) m = int(n ** 0.5) result = [] for i in range(0, n, m): result.append(array[i:i + m]) return result 

Вот и все.

Альтернативно, s=lambda a:(lambda m:[a[i*m:i*m+m]for i in range(m)])(int(len(a)**.5))

Я использую этот код все время.

 def chunkify(items, chunk_len): return [items[i:i+chunk_len] for i in range(0,len(items),chunk_len)] 

Вот одно из решений:

 def split_list(big_list, x): list_size = len(big_list) splits = int(list_size / x) return [big_list[k*x:k*x+x] for k in range(splits)] big_list = [i+1 for i in range(16)] print(big_list) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] small_list = split_list(big_list, 4) print(small_list) # [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] small_list = split_list(big_list, 2) print(small_list) # [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12], [13, 14], [15, 16]] small_list = split_list(big_list, 3) print(small_list) # [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]] 

почему бы не использовать numpy :

 >>> import numpy as np >>> big_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] >>> a=np.array(big_list) >>> a array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]) >>> n=int(len(big_list)**0.5) >>> a.reshape(n,n) array([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12], [13, 14, 15, 16]]) 

или просто :

 >>> big_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] >>> n=int(len(big_list)**0.5) >>> new_list=[big_list[i:i+n] for i in range(0, len(big_list), n)] >>> new_list [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] 
  • `xrange (2 ** 100)` -> OverflowError: long int too large для преобразования в int
  • Инициализация / прототипирование проекта Python 3
  • Захват акцентированных символов путем изменения определенного регулярного выражения, которое у меня есть в python3
  • Количество пирамид, вложенных в цикл
  • Лучший способ преобразовать строку в байты в Python 3?
  • Что означает префикс ab перед строкой python?
  • Как использовать os.scandir () для рекурсивного возврата объектов DirEntry в дерево каталогов?
  • PIL для Python 3.2 на Windows или альтернативы?
  • Python - лучший язык программирования в мире.