Иногда нужно поменять содержимое двух списков местами так, чтобы ссылки на них остались прежними.
То есть объекты остаются теми же, а данные — полностью меняются.
Создайте функцию swap(a, b)
, которая принимает два списка и меняет их содержимое местами.
Результат должен быть виден во всех переменных, которые ссылаются на эти списки.ет один из всех переданных чисел.
Примечание
Ваше решение должно содержать только функции.
В решении не должно быть вызовов требуемых функций.
В этой задаче отключены стандартные сортировки
Пример
Ввод
a = b = [1, 2]
c = d = [2, 1]
print(a, b, c, d)
swap(a, c)
print(a, b, c, d)
Вывод
[1, 2] [1, 2] [2, 1] [2, 1]
[2, 1] [2, 1] [1, 2] [1, 2]
Решение
Яндекс рекомендует использовать срезы, и с этой подсказкой задача становится слишком простой. Усложнить ее можно лишь, если вы не знаете, что можно написать такой срез – a[:]. Но если вы знаете, то все становится слишком просто.
Есть более “наивные” методы решения:
1) Методы copy(), clear(), extend()
2) Поэлементный обмен через цикл
Посмотреть код
Решение
def swap(a, b):
a[:], b[:] = b[:], a[:]
Решение
def swap(a, b):
temp = a.copy()
a.clear()
a.extend(b)
b.clear()
b.extend(temp)
Решение
def swap(a, b):
min_len = min(len(a), len(b))
for i in range(min_len):
a[i], b[i] = b[i], a[i]
temp_a = a[min_len:].copy()
temp_b = b[min_len:].copy()
a[min_len:] = temp_b
b[min_len:] = temp_a