Руководство по пониманию кода - разбиение массива на меньшие массивы - PullRequest
0 голосов
/ 20 октября 2019

У меня проблема с пониманием одного процесса, который разбивает массив на меньшие массивы. Я публикую две строки ниже, и я был бы признателен, если бы вы объяснили мне, что делает определенная часть. Заранее спасибо:)

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9] 

# How many elements each 
# list should have 
n = 4 

final = [my_list[i * n:(i + 1) * n] for i in range((len(my_list) + n - 1) // n )]  


# Almost the same code with some changes:
def split_list(alist, wanted_parts=1):
    length = len(alist)
    return [ alist[i*length // wanted_parts: (i+1)*length // wanted_parts] 
             for i in range(wanted_parts) ]

A = [0,1,2,3,4,5,6,7,8,9]

1 Ответ

0 голосов
/ 20 октября 2019

в чем ваша проблема? у вас есть начальный список

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9] 

, например, вы хотите разделить его на 3 части. Итак, вы вызываете функцию

split_list(my_list, wanted_parts =3)

внутри функции, у вас будет:

length = len(alist) # it will be 9

, тогда у вас будет это:

for i in range(wanted_parts)  # range(3), so it would be i = [0,1,2]

, тогда у вас будет:

alias[xxxx:yyyy] # where xxxx - start point of slice and yyyy - end point of slice, and you have it 3 times and pass there i = (0,1,2)

теперь давайте проверим хххх. в вашем случае это:

i*length // wanted_parts  # i=0..2, length = 9, wanted_parts = 3, so all of this = 0, 3, 6

Теперь давайте проверим гггг. в вашем случае это:

(i+1)*length // wanted_parts. # i = 0..2, (i+1) = 1..3, length = 9, wanted_parts = 3, so all of this = 3, 6, 9

итого у вас будет:

[0:3], [3:6], [6:9] # - and it will be 3 parts of your list
...