【Python】蜗牛排序
生活随笔
收集整理的這篇文章主要介紹了
【Python】蜗牛排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定一個 n x n數組,返回從最外面的元素到中間的元素排列的數組元素,順時針方向移動。
例如:
具體排序如圖:
Python 代碼實現
如果各位大神有更好的步驟,歡迎指出呀!
簡單的循環解法
第一種:
# 蝸牛排序 array = [[1, 2, 3],[4, 5, 6],[4, 5, 6] ]def snail(arrays):arr_list = cycle(arrays)arr = arr_list[1]lists = arr_list[0]while len(arr) != 0:# 執行蝸牛排序arr_list = cycle(arrays)arr = arr_list[1]lists += arr_list[0]# print(lists)return listsdef cycle(arrays):arr_list = arrays# 獲取列表長度length = len(arr_list)lists = []popList = []for i in range(length):# 第一個列表正常排序if i == 0:[lists.append(i) for i in arr_list[i]]# 獲取除第一個列表外的其他列表的最后一位數elif i < length:lists.append(arr_list[i][length - 1])arr_list[i].pop(length - 1)# 移除已排序的數字popList.append(arr_list[i].pop(0))# 反轉最后一個列表if i == length - 1:arr_list[i].reverse()[lists.append(i) for i in arr_list[i]]# 反轉拋出列表并填充進入排序popList.reverse()for i in popList:lists.append(i)# 使函數跳出循環arr_list.pop(0)length = len(arr_list)if length == 0:passelse:arr_list.pop(length - 1)return lists, arr_listprint(snail(array))第二種
def snail(array):ret = []if array and array[0]:size = len(array)for n in range((size + 1) // 2):for x in range(n, size - n):ret.append(array[n][x])for y in range(1 + n, size - n):ret.append(array[y][-1 - n])for x in range(2 + n, size - n + 1):ret.append(array[-1 - n][-x])for y in range(2 + n, size - n):ret.append(array[-y][n])return ret第三種
def snail(array):next_dir = {"right": "down", "down":"left", "left":"up", "up":"right"}dir = "right"snail = []while array:if dir == "right":snail.extend(array.pop(0))elif dir == "down":snail.extend([x.pop(-1) for x in array])elif dir == "left":snail.extend(list(reversed(array.pop(-1))))elif dir == "up":snail.extend([x.pop(0) for x in reversed(array)]) dir = next_dir[dir]return snail使用第三方庫
import numpy as npdef snail(array):m = []array = np.array(array)while len(array) > 0:m += array[0].tolist()array = np.rot90(array[1:])return m其他解法
def snail(array):out = []while len(array):out += array.pop(0)array = list(zip(*array))[::-1] # Rotatereturn out總結
以上是生活随笔為你收集整理的【Python】蜗牛排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java】练习题:数字判断
- 下一篇: 【Python 小知识】[:-1] 和