Нужно добавить несколько списков в один, но в reverse состоянии
def data_reverse(data):
chunk_size = 8
splitted_list = list()
for i in range(0, len(data), chunk_size):
a = data[i:i+chunk_size]
splitted_list.append(a)
b = splitted_list[::-1]
print()
data_reverse([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])
Есть такой код. Нужно чтобы массив делился на несколько массивов по 8 элементов. Но должны быть в reverse.То есть [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] => [[1,2,3,4,5,6,7,8],[9,10,11,12,13,14,15,16]] => [[9,10,11,12,13,14,15,16],[1,2,3,4,5,6,7,8]] => [9,10,11,12,13,14,15,16,1,2,3,4,5,6,7,8] P.S без библиотек
Ответы (4 шт):
Думаю, этот код Вам поможет
chuck_size = 8
def list_swap(my_list : list, chank_size : int) -> list:
func_list = my_list.copy()
new_list = []
last_i = 0
for i in range(chank_size,len(my_list),chank_size):
new_list.append(func_list[last_i:i])
last_i = i
else:
new_list.append(func_list[i:len(my_list)])
func_list = []
for i in range(len(new_list)-1, -1,-1):
func_list.extend(new_list[i])
return func_list
test = list_swap([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17], chuck_size)
print(test)
Объясняю:
func_list = my_list.copy()
Копирую старый список, чтобы ничего случайно там не изменить (тк список ссылочный тип)
for i in range(chank_size,len(my_list),chank_size):
new_list.append(func_list[last_i:i])
last_i = i
Разбиваю список на подсписки размером chank_size
else:
new_list.append(func_list[i:len(my_list)])
После цикла додобавляю лишние элементы
for i in range(len(new_list)-1, -1,-1):
func_list.extend(new_list[i])
Просто записываю элементы списка в обратном порядке. Заметьте, я использую для этого extend, чтобы в итоге получился единый список без подсписков
В конце просто возвращаю получившийся список
Можно куски массива просто записать в обратном порядке
def data_reverse(data, chunk_size):
splitted_list = list()
for i in range(0, len(data), chunk_size):
a = data[i:i + chunk_size]
splitted_list = a + splitted_list
return splitted_list
print(data_reverse([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], 8))
# [9, 10, 11, 12, 13, 14, 15, 16, 1, 2, 3, 4, 5, 6, 7, 8]
Рекурсивный вариант
def data_reverse(lst, size=8):
return data_reverse(lst[size:], size) + lst[:size] if len(lst) > size else lst
print(data_reverse(list(range(1, 17))))
[9, 10, 11, 12, 13, 14, 15, 16, 1, 2, 3, 4, 5, 6, 7, 8]
Самое простое решение. Единственный трюк это range(...)[::-1]. Можно написать reversed(range(...)):
def data_reverse(data, chunk_size=8):
result = []
for i in range(0, len(data), chunk_size)[::-1]:
result.extend(data[i:i + chunk_size])
return result