Skip to content

Instantly share code, notes, and snippets.

@GlulkAlex
Last active February 1, 2023 13:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GlulkAlex/14253c82eeac8bfeb6935655f7e7c3d6 to your computer and use it in GitHub Desktop.
Save GlulkAlex/14253c82eeac8bfeb6935655f7e7c3d6 to your computer and use it in GitHub Desktop.
To rotate list of items clockwise
>>> (l_s := len(l), l_r := list(reversed(l)), [(l_r[0:-l_s + i + 1][::-1], l[0:l_s - i - 1:]) for i in range(0, l_s - 1, 1)])
(5, [5, 4, 3, 2, 1], [([5], [1, 2, 3, 4]), ([4, 5], [1, 2, 3]), ([3, 4, 5], [1, 2]), ([2, 3, 4, 5], [1])])
# iteration using mod of list size
>>> [[l[5 - (r_i + i) % 5 - 1] for i in range(0, 5, 1)] for r_i in range(0, 5, 1)]
[[5, 4, 3, 2, 1], [4, 3, 2, 1, 5], [3, 2, 1, 5, 4], [2, 1, 5, 4, 3], [1, 5, 4, 3, 2]]
# counterclockwise
>>> [[l[(r_i + i) % 5] for i in range(0, 5, 1)] for r_i in range(0, 5, 1)]
[[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]]
# and clockwise
# starting from initial list
>>> [[l[(r_i + i) % 5] for i in range(0, 5, 1)] for r_i in range(5, 0, -1)]
[[1, 2, 3, 4, 5], [5, 1, 2, 3, 4], [4, 5, 1, 2, 3], [3, 4, 5, 1, 2], [2, 3, 4, 5, 1]]
# and starting with an actual rotation
>>> [[l[(r_i + i) % 5] for i in range(0, 5, 1)] for r_i in range(5 - 1, -1, -1)]
[[5, 1, 2, 3, 4], [4, 5, 1, 2, 3], [3, 4, 5, 1, 2], [2, 3, 4, 5, 1], [1, 2, 3, 4, 5]]
>>> l_s
5
>>> l_s == len(l)
True
>>> [[l[(r_i + i) % l_s] for i in range(0, l_s, 1)] for r_i in range(l_s - 1, -1, -1)]
[[5, 1, 2, 3, 4], [4, 5, 1, 2, 3], [3, 4, 5, 1, 2], [2, 3, 4, 5, 1], [1, 2, 3, 4, 5]]
# reversed
>>> [[l[(5 - (r_i + i)) % 5] for i in range(0, 5, 1)] for r_i in range(0, 5, 1)]
[[1, 5, 4, 3, 2], [5, 4, 3, 2, 1], [4, 3, 2, 1, 5], [3, 2, 1, 5, 4], [2, 1, 5, 4, 3]]
>>> [[l[(r_i + i) % 5] for i in range(5 - 1, -1, -1)] for r_i in range(0, 5, 1)]
[[5, 4, 3, 2, 1], [1, 5, 4, 3, 2], [2, 1, 5, 4, 3], [3, 2, 1, 5, 4], [4, 3, 2, 1, 5]]
>>> [[l[(r_i + i) % 5] for i in range(5 - 1, -1, -1)] for r_i in range(5 - 1, -1, -1)]
[[4, 3, 2, 1, 5], [3, 2, 1, 5, 4], [2, 1, 5, 4, 3], [1, 5, 4, 3, 2], [5, 4, 3, 2, 1]]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment