Flo*_*mer 0 python sorting permutation
我想根据它们的索引模3来置换列表的元素,例如列表:
[0,1,2,3,4,5,6,7,8]
Run Code Online (Sandbox Code Playgroud)
应重新订购:
[0,3,6,1,4,7,2,5,8]
Run Code Online (Sandbox Code Playgroud)
一般来说:
[A0, A1, A2, A3, A4, A5, A6, A7, A8]
Run Code Online (Sandbox Code Playgroud)
应成为:
[A0, A3, A6, A1, A4, A7, A2, A5, A8]
Run Code Online (Sandbox Code Playgroud)
我试过使用以下代码:
def arr_sort(arr, algo):
arrtmp = arr
arrlen = len(arr)
if algo == 1:
return arr
if algo == 2:
count = 0
while count < (arrlen - 1):
for index, val in enumerate(arr):
if index % 3 == 0:
arrtmp[count] = val
count += 1
for index, val in enumerate(arr):
if index % 3 == 1:
arrtmp[count] = val
count += 1
for index, val in enumerate(arr):
if index % 3 == 2:
arrtmp[count] = val
count += 1
return arrtmp
Run Code Online (Sandbox Code Playgroud)
它不能正常工作,因为arr在整个循环过程中会发生变化,我无法理解为什么.(我也知道我也可以f index % ...在for循环中执行" bit " ,但它应该可以正常工作,对吗?)
是否有预先存在的功能可以做到这一点?
您正在重新排序以下模数3:
l = [0,1,2,3,4,5,6,7,8]
l_sorted = sorted(l, key=lambda x: x%3)
print(l_sorted)
# [0, 3, 6, 1, 4, 7, 2, 5, 8]
Run Code Online (Sandbox Code Playgroud)
如果您要对索引进行重新排序而不是对值进行重新排序,那么更详细的要求enumerate就是:
l_sorted = [x[1] for x in sorted(enumerate(l), key=lambda x: x[0]%3)]
print(l_sorted)
# [0, 3, 6, 1, 4, 7, 2, 5, 8]
Run Code Online (Sandbox Code Playgroud)