python學習之代碼練習三(三個數排序)
題目
題目鏈接:1454
實現代碼
#!usr/bin/python
# coding=utf-8
import re
def quick_sort(lis):
if len(lis) <= 0:
return []
else:
small = [x for x in lis[1:] if x < lis[0]]
big = [x for x in lis[1:] if x >= lis[0]]
return quick_sort(small) + [lis[0]] + quick_sort(big)
input_str = raw_input()
if not re.findall('[0-9]+[,]+', input_str):
exit()
split_str = input_str.split(',')
if len(split_str) != 3:
exit()
try:
split_str = map(int, split_str)#將列表中的元素的類型由字符改爲數字
except ValueError:
exit()
split_str = quick_sort(split_str)
result = ""
for index in range(len(split_str)):
if index == len(split_str) - 1:
result = result + str(split_str[index])
else:
result = result + str(split_str[index]) + " "
print result
關鍵點
- 快速排序
這裏可以使用自己寫的快速排序,也可以使用python自帶的內置排序函數 sort()
def quick_sort(lis):
if len(lis) <= 0:
return []
else:
small = [x for x in lis[1:] if x < lis[0]] #比lis[0]小的放到small列表裏
big = [x for x in lis[1:] if x >= lis[0]] #比lis[0]大的放到big列表裏
return quick_sort(small) + [lis[0]] + quick_sort(big) #重新組合(遞歸調用)
- 將字符型列表轉換成整型列表
如: 將 [‘0’, ‘1’, ‘2’, ‘3’] 轉換成 [0, 1, 2, 3]
split_str = map(int, split_str) #split_str轉換前是一個字符型列表,轉換後爲一個整型列表
- 通過正則表達式篩選輸入的合法性
參考:正則表達式 - 教程
re.findall('[0-9]+[,]+', input_str) #匹配只包含數字和逗號.
- 字符串和數字的拼接,得到字符串
result + str(split_str[index]) #result是一個字符串,split_str[index] 是一個整數