當前位置:首頁 » 編程語言 » python文件排序

python文件排序

發布時間: 2023-05-16 12:11:27

❶ 怎樣用python將數組里的數從高到低排序

1、首先我們定義一個列表輸入一串大小不一的數字。

❷ Python中對列表進行排序的方法有哪些呢

python中有兩種排序方法,list內置sort()方法或者python內置的全局sorted()方法
二者區別為:
sort()方法對list排序會修改list本身,不會返回新list。sort()只能對list進行排序。
sorted()方法會返回新的list,保留原來的list。sorted 可以對所有可迭代的對象進行排序操作。

❸ python 內置排序函數使用

python內置關於排序的工具主要有兩個一個是列表自帶的 sort() 方法,另外一個是 sorted() 函數。Python 列表內置方法可以直接修改列表。而 sorted() 內置函數從一個可迭代對象(列表,元組等都可以)構建一個新的排序列表。其函數原型分別如下:

對列表進行默認排序

從函數原型來看,可以看到兩者都具有兩個可選參數,它們都必須指定為關鍵字參數。
key 指定帶有單個參數的函數,用於從 iterable 的每個元素中提取用於比較的鍵 (例如 key=str.lower)。默認值為 None (直接比較元素)。 key 形參的值應該是個函數(或其他可調用對象),它接受一個參數並返回一個用於排序的鍵。

假設有其他類型的變數,比如一個自定義的類或者列表中又是一個列表。以官網例子為例有這樣一個列表,其元素為元組,

可以用以下方式按照年齡排序

類似的有自定義類

可以用如下方式進行排序

也可以顯示定義一個函數,且只有一個參數,返回用於排序的鍵,比如

總之就是定義一個函數返回一個用於排序的鍵,可以用lambda函數或者 def 定義都可以。

上面實現的簡單函數實際就是實現了返回一個有序結構的第 n 的元素,或者某個類中的某個屬性,因此 Python 提供了便利功能,使訪問器功能更容易,更快捷。operator 模塊有 itemgetter() 、 attrgetter() 函數。分別完成返回第 n 個元素,某個屬性功能。上面的排序可以用如下方式進行實現

在python2中,sort有一個 cmp 參數,即用一個函數來自定義比較,在python3中這種方式被取消。為了繼承類似的用法,在 Python 3.2 中, functools.cmp_to_key() 函數被添加到標准庫中的 functools 模塊中。
這種作用先定義如何比較兩個變數,以上面的學生列表按照年齡排序為例

這種做法自定義比較函數接收兩個形參,返回比較結果(bool),而新式方法接受一個參數,返回的是比較的鍵。

假設有字典 d = {'b':2, 'a':1,'c':8,'d':4} ,則可以通過以下方式對字典按照鍵和值進行排序

❹ python常見的三種列表排序演算法分別是什麼

排序是計算機程序設計中的一種重要操作,它的功能是將一個數據元素的任意序列,重新排列成一個關鍵字有序的序列。那麼python列表排序演算法有哪些?本文主要為大家講述python中禪棚經常用的三種排序演算法:冒泡排序、插入排序和選擇排序。

1、冒泡排序

冒泡排序,Bubble

Sort,是一種簡單的排序演算法。它重復地遍歷要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。遍歷數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢浮到數列的頂端。

2、插入排序

插戚襲差入排序,Insertion

Sort,是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,在從後向前的掃描過程中,需要把已排序元素逐步向後挪位,為最新元素提供插入空間。

3、選擇高皮排序

選擇排序,Selection

Sort,是一種簡單直觀的排序演算法。它的工作原理如下:首先在未排序序列中找到最小、最大元素,存放到排序序列的起始位置,然後再從剩餘未排序元素中繼續尋找最小、最大元素。放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

❺ python幾種經典排序方法的實現

class SortMethod:
'''
插入排序的基本操作就是將一個數據插入到已經排好序的有序數據中,從而得到一個新的、個數加一的有序數據,演算法適用於少量數據的排序,時間復雜度為O(n^2)。是穩定的排序方法。
插入演算法把要排序的數組分成兩部分:
第一部分包含了這個數組的所有元素,但將最後一個元素除外(讓數組多一個空間才有插入的位置)
第二部分就只包含這一個元素(即待插入元素)。
在第一部分排序完成後,再將這個最後元素插入到已排好序的第一部分中。
'''
def insert_sort(lists):
# 插入排序
count = len(lists)
for i in range(1, count):
key = lists[i]
j = i - 1
while j >= 0:
if lists[j] > key:
lists[j + 1] = lists[j]
lists[j] = key
j -= 1
return lists
'''
希爾排序 (Shell Sort) 是插入排序的一種。也稱縮小增量排序,是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。該方法因 DL.Shell 於 1959 年提出而得名。
希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序演算法排序;隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至 1 時,整個文件恰被分成一組,演算法便終止。
'''
def shell_sort(lists):
# 希爾排序
count = len(lists)
step = 2
group = count / step
while group > 0:
for i in range(0, group):
j = i + group
while j < count:
k = j - group
key = lists[j]
while k >= 0:
if lists[k] > key:
lists[k + group] = lists[k]
lists[k] = key
k -= group
j += group
group /= step
return lists
'''
冒泡排序重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。
'''
def bubble_sort(lists):
# 冒泡排序
count = len(lists)
for i in range(0, count):
for j in range(i + 1, count):
if lists[i] > lists[j]:
temp = lists[j]
lists[j] = lists[i]
lists[i] = temp
return lists
'''
快速排序
通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列
'''
def quick_sort(lists, left, right):
# 快速排序
if left >= right:
return lists
key = lists[left]
low = left
high = right
while left < right:
while left < right and lists[right] >= key:
right -= 1
lists[left] = lists[right]
while left < right and lists[left] <= key:
left += 1
lists[right] = lists[left]
lists[right] = key
quick_sort(lists, low, left - 1)
quick_sort(lists, left + 1, high)
return lists
'''
直接選擇排序
第 1 趟,在待排序記錄 r[1] ~ r[n] 中選出最小的記錄,將它與 r[1] 交換;
第 2 趟,在待排序記錄 r[2] ~ r[n] 中選出最小的記錄,將它與 r[2] 交換;
以此類推,第 i 趟在待排序記錄 r[i] ~ r[n] 中選出最小的記錄,將它與 r[i] 交換,使有序序列不斷增長直到全部排序完畢。
'''
def select_sort(lists):
# 選擇排序
count = len(lists)
for i in range(0, count):
min = i
for j in range(i + 1, count):
if lists[min] > lists[j]:
min = j
temp = lists[min]
lists[min] = lists[i]
lists[i] = temp
return lists
'''
堆排序 (Heapsort) 是指利用堆積樹(堆)這種數據結構所設計的一種排序演算法,它是選擇排序的一種。
可以利用數組的特點快速定位指定索引的元素。堆分為大根堆和小根堆,是完全二叉樹。大根堆的要求是每個節點的值都不大於其父節點的值,即 A[PARENT[i]] >= A[i]。
在數組的非降序排序中,需要使用的就是大根堆,因為根據大根堆的要求可知,最大的值一定在堆頂。
'''
# 調整堆
def adjust_heap(lists, i, size):
lchild = 2 * i + 1
rchild = 2 * i + 2
max = i
if i < size / 2:
if lchild < size and lists[lchild] > lists[max]:
max = lchild
if rchild < size and lists[rchild] > lists[max]:
max = rchild
if max != i:
lists[max], lists[i] = lists[i], lists[max]
adjust_heap(lists, max, size)
# 創建堆
def build_heap(lists, size):
for i in range(0, (size/2))[::-1]:
adjust_heap(lists, i, size)
# 堆排序
def heap_sort(lists):
size = len(lists)
build_heap(lists, size)
for i in range(0, size)[::-1]:
lists[0], lists[i] = lists[i], lists[0]
adjust_heap(lists, 0, i)
'''
歸並排序是建立在歸並操作上的一種有效的排序演算法,該演算法是採用分治法 (Divide and Conquer) 的一個非常典型的應用。將已有序的子序列合並,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合並成一個有序表,稱為二路歸並。
歸並過程為:
比較 a[i] 和 a[j] 的大小,若 a[i]≤a[j],則將第一個有序表中的元素 a[i] 復制到 r[k] 中,並令 i 和 k 分別加上 1;
否則將第二個有序表中的元素 a[j] 復制到 r[k] 中,並令 j 和 k 分別加上 1,如此循環下去,直到其中一個有序表取完,然後再將另一個有序表中剩餘的元素復制到 r 中從下標 k 到下標 t 的單元。歸並排序的演算法我們通常用遞歸實現,先把待排序區間 [s,t] 以中點二分,接著把左邊子區間排序,再把右邊子區間排序,最後把左區間和右區間用一次歸並操作合並成有序的區間 [s,t]。
'''
def merge(left, right):
i, j = 0, 0
result = []
while i < len(left) and j < len(right):
if left[i] <= right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
result += left[i:]
result += right[j:]
return result
def merge_sort(lists):
# 歸並排序
if len(lists) <= 1:
return lists
num = len(lists) / 2
left = merge_sort(lists[:num])
right = merge_sort(lists[num:])
return merge(left, right)
'''
基數排序 (radix sort) 屬於「分配式排序」 (distribution sort),又稱「桶子法」 (bucket sort) 或 bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些「桶」中,藉以達到排序的作用,基數排序法是屬於穩定性的排序。
其時間復雜度為 O (nlog(r)m),其中 r 為所採取的基數,而 m 為堆數,在某些時候,基數排序法的效率高於其它的穩定性排序法。
'''
import math
def radix_sort(lists, radix=10):
k = int(math.ceil(math.log(max(lists), radix)))
bucket = [[] for i in range(radix)]
for i in range(1, k+1):
for j in lists:
bucket[j/(radix**(i-1)) % (radix**i)].append(j)
del lists[:]
for z in bucket:
lists += z
del z[:]
return lists
---------------------
作者:CRazyDOgen
來源:CSDN
原文:https://blog.csdn.net/jipang6225/article/details/79975312
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

❻ python 讀取文件 給數字排序

文件這樣子:

❼ python 讀取csv文件,並按行數據進行排序

import csv

list=[]

with open('tttpsi.csv', encoding='utf-8') as file:

    f_csv = csv.reader(file)

    for i, rows in enumerate(f_csv):

        if i >= 1:

            # new_row = []

   埋裂瞎         row = rows[1:-1]

            # print(row)

       彎空     row.sort(reverse=True) #reverse=True 降序排序  默認是升序排序

            row_1=row[0:5] #取前五個數值,如果想全部保留,則去掉[0:5]

 源扒           # print(row_1)

            list.append(row_1)

    print(list)

with open('mescpsisort.csv', 'w', encoding='utf8', newline='') as f2:

    f_csv2 = csv.writer(f2)

    f_csv2.writerows(list)

❽ python 怎麼樣給文件夾排序

#encoding:utf-8
import弊型os

#設置文件夾所罩卜友在路徑,我這里設置物槐哦當前路徑
path='./'
#列出路徑下所有的目錄+文件
files=os.listdir(path)
dirs=[]

foriinfiles:
#如果是目錄,則追加到dirs列表中
ifos.path.isdir(path+i):
dirs.append(i)
#按照sorted規則進行排序
printsorted(dirs)

❾ Python對數據進行排序-中英文

sort_values(by,axis=0,ascending=True,inplace=False,kind='quicksort',na_position='last')

參數說明:

by:  可以填入字元串或者字元串組成的列表。也就是說, 如果axis=0,那麼by="列名";如果axis=1,那麼by="行名"。

axis:  {0 or 『index』, 1 or 『columns』}, default 0,意思就是如果 axis=0,就按照索引排序,即縱向排序;如果axis=1,則按列排序,即橫向排序。默認是axis=0 。

ascending:  輸入布爾型, True是升序 , False是降序 ,也可以可以是[True,False],即第一個欄位升序,第二個欄位降序 。

inplace : 輸入布爾型,是否用排序後的數據框替換現有的數據框

kind:  排序的方法,{『quicksort』, 『mergesort』, 『heapsort』},默認是使用『quicksort』。這個參數用的比較少,大家可以試一試。

na_position :  {『first』, 『last』}, 缺失值的排序 ,也就說決定將缺失值放在數據的最前面還是最後面 。first是排在前面,last是排在後面,默認是用last 。

例子:

scores= pd.DataFrame([[87,56,85],[46,87,97],[34,65,86]],columns=['jack', 'rose', 'mike'])

scores

1.對『rose』這一列進行降序排序:

df_sc=scores.sort_values(by='rose',ascending=False)

df_sc

2.對第0行進行升序排序:

scores.sort_values(by=0,axis=1,ascending=True)

3.第1行進行升序,第0行進行降序:

scores.sort_values(by=[1,0],axis=1,ascending=[True,False]

4.觀察數據

data.head:

查看數據的前五行。

data.tail:

查看數據的後五行。

data.shape :

查看矩陣或數組的維數,或者是說數據表的結構(有幾行幾列)。

data.info :

查看數據的基本信息,如:數據類型、缺失值數量等。

#brand目標:中文-中英-英文

2.1 包含中文,純英文

for i in range(0,len(file1)):

    result = re.compile(u'[\u4e00-\u9fa5]')

    contents = file1['brand'][i]

    match = result.search(contents)

    if match:

        file1.loc[i,['index1']]=0    #0為包含中文

    else:

        file1.loc[i,['index1']]=1    #1為純英文

2.1 包含英文,純中文

for i in range(0,len(file1)):

    file1.loc[i,['index2']]=len(re.findall('[a-zA-Z]+', file1['brand'][i]) )  #0為純中文,1為包含英文

❿ 937. 重新排列日誌文件(Python)

更多精彩內容,請關注 【力扣簡單題】 。

難度:★★☆☆☆
類型:字元串

你有一個日誌數組 logs。每條日誌都是以空格分隔的字串。

對於每條日誌,其或攜第一個字為字母數字標識符。然氏團行後,要麼:

標識符後面的每個字將僅由小寫字母組成,或;
標識符後面的每個字將僅由數字組成。
我們將這兩種日誌分別稱為字母日誌和數字日誌。保證每個日誌在其標識符後面至少有一個字。

將日誌重新排序,使得所有字母日誌都排在數字日誌之前。字母日誌按內容字母順序排序,忽略標識符;在內容相同時,按標識符排序。數字日誌應該按原來的順序排列。

返回日誌的最終順序。

提示
0 <= logs.length <= 100
3 <= logs[i].length <= 100
logs[i] 保證有一個標識符,並且標識符後面有一個字。

輸入:["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"]
輸出:["g1 act car","a8 act zoo","ab1 off key dog","a1 9 2 3 1","zo4 4 7"]

一則日誌由殲嘩兩部分組成,按照第一個空格劃分成標識符和內容;根據內容的第一個字元是數字還是字母,可以將日誌劃分為數字日誌和字母日誌兩類。

我們藉助python中sort函數的關鍵字完成排序,每一個日誌對應一個元組,利用元組的不同位置代表不同優先順序,排序優先順序為:

由於只有字母日誌內部需要排序,因此數字日誌對應的元素也可以設置為空。

我們構建函數,輸入一條日誌,輸出相應的元組。

如有疑問或建議,歡迎評論區留言~

熱點內容
如何訪問電腦工作組 發布:2025-07-16 09:39:24 瀏覽:182
動態優先權演算法 發布:2025-07-16 09:39:02 瀏覽:201
火車wifi密碼是多少啊 發布:2025-07-16 09:35:46 瀏覽:756
sql的視圖是從中導出的 發布:2025-07-16 09:31:34 瀏覽:784
安卓如何打開shell窗口 發布:2025-07-16 09:28:09 瀏覽:313
華為榮耀備忘錄文件夾 發布:2025-07-16 09:23:23 瀏覽:972
基於特徵匹配演算法 發布:2025-07-16 09:18:23 瀏覽:46
夢香神奇寶貝伺服器的ip 發布:2025-07-16 09:14:07 瀏覽:212
電子密碼手套箱是什麼 發布:2025-07-16 09:13:27 瀏覽:799
手機連接資料庫 發布:2025-07-16 09:13:23 瀏覽:132