@beckmiller

Поменяйте местами первую и вторую половины списка. Как упростить?

Привет ребята как можно решить этот вопрос без срезов помоги те пожалуйста.
a = []
n = int(input())

for i in range(n):
    new_n = int(input())
    a.append(new_n)
b = len(a) // 2
a = a[b:] + a[:b]
print(a)
  • Вопрос задан
  • 160 просмотров
Решения вопроса 1
@deliro
Срезы в данном случае будут самыми простыми и быстрыми. Но для прикола можно так:

from collections import deque

d = deque(a)
d.rotate(len(a) // 2)
a = list(d)


Но это МЕДЛЕННЕЕ и не проще
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Вспоминается первый курс и паскаль :)

import random

n, rand_min, rand_max = 12, 1, 99
a, b, c = [], [], []

for i in range(0, n):
    a.append(random.randint(rand_min, rand_max))

print('Массив: %s' % a)

m = n // 2

if n % 2 > 0:
    k = 1
else:
    k = 0

for i in range(n - m - k, n):
    b.append(a[i])

for i in range(0, m):
    c.append(a[i])

print('Первая половина: %s' % c)
print('Вторая половина: %s' % b)

print('Перевернутые половины: %s' % (b + c))
Ответ написан
Ну, если нужно именно без срезов, то я бы предложил такой примитив:
>>> a = ['q','w','e','r','t','y']
>>> h = len(a)//2
>>> for i in range(h):
	a[i], a[h+i] = a[h+i], a[i]
>>> a
['r', 't', 'y', 'q', 'w', 'e']
Оговорка: раз Вы пишите "Поменяйте местами первую и вторую половины", очевидно, длина списа чётная (если возможна нечётная, нужно будет чуть усложнить).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы