Как вывести список списков в Python в нужном виде?
Дан начальный список:
[1,2,3,4,5]
Нужно вывести список списков вида:
[[1,2,3,4,5], [2,3,4,5,1], [3,4,5,1,2], [4,5,1,2,3], [5,1,2,3,4]]
Что мне нужно исправить в коде,чтобы получить правильный результат?
a=[1,2,3,4,5]
x=[]
for i in range(len(a)):
a.append(a.pop(0))
x.append(a)
print(x)
Ответы (5 шт):
Автор решения: Zhihar
→ Ссылка
В лоб:
x = [1, 2, 3, 4, 5]
z = []
for j in range(len(x)):
y = []
for i in range(len(x)):
y.append(x[(i + j) % len(x)])
z.append(y)
print(z)
чуть покороче вариант:
x = [1, 2, 3, 4, 5]
z = []
for j in range(len(x)):
z.append(list(map(lambda i : x[(i + j) % len(x)], range(len(x)))))
print(z)
и совсем коротко:
x = [1, 2, 3, 4, 5]
z = list(map(lambda j: list(map(lambda i : x[(i + j) % len(x)], range(len(x)))), range(len(x))))
print(z)
и ещё чуть покороче:
x = [1, 2, 3, 4, 5]
z = list(map(lambda j, s=len(x): list(map(lambda i: x[(i + j) % s], range(s))), range(len(x))))
print(z)
и ещё чуть покороче :)
x = [1, 2, 3, 4, 5]
z = [*map(lambda j, s=len(x): [*map(lambda i: x[(i + j) % s], range(s))], range(len(x)))]
print(z)
Автор решения: Danis
→ Ссылка
a=[1,2,3,4,5]
x=[]
for i in range(len(a)):
x.append(a.copy())
a.append(a.pop(0))
print(x)
Автор решения: mkkik
→ Ссылка
Использование deque позволяет писать лаконичный код для таких задач:
from queue import deque
l = [1, 2, 3, 4, 5]
d = deque(l)
result = []
for _ in range(len(d)):
result.append(list(d))
d.append(d.popleft())
print(result)
Автор решения: imitusov
→ Ссылка
Можно при помощи генератора:
a = list(range(1, 6))
[a[i:] + a[:i] for i in range(len(a))]
[[1, 2, 3, 4, 5],
[2, 3, 4, 5, 1],
[3, 4, 5, 1, 2],
[4, 5, 1, 2, 3],
[5, 1, 2, 3, 4]]
Немного быстрее, чем вариант выше
%%timeit
[a[i:] + a[:i] for i in range(len(a))]
1.12 µs ± 6.34 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
x = list(range(1, 6))
list(map(lambda j: list(map(lambda i : x[(i + j) % len(x)], range(len(x)))), range(len(x))))
5.86 µs ± 27.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Автор решения: Михаил Муругов
→ Ссылка
# Исходные данные
a = list(range(1,6))
# Результат
x = [sorted(a, key=lambda item: item % e) for e in a]
Объяснение:
lambda item: item % e- функция, возвращающая остаток от деления наe;sorted(a, key=lambda item: item % e)- сортированный списокa. Сортируем по остатку от деления наe;[sorted(a, key=lambda item: item % e) for e in a]- список отсортированных списковaпо остатку от деления наeдля каждогоeизa.