python各個模塊

os模塊

os.listdir(path=’.’)

以list形式返回路徑下的所有文件名,傳入path時要注意一點,路徑中的反斜線最好使用兩個,使用一個反斜線加字母容易產生反義歧義

import os

x=os.listdir(path='F:\人人影視下載視頻')
print(x)

在這裏插入圖片描述
執行結果:
在這裏插入圖片描述
注意這個list是無序的

python os官方文檔

algorithm模塊

sort():

該函數可以給數組,鏈表list或者向量排序,用法:
sort(first_pointer,first_pointer+n,cmp)

  • first_pointer:數組的首地址,一般寫上數組名就可以,因爲數組名是一個指針常量
  • first_pointer+n:代表排序的尾地址
  • cmp:可以不填,默認按數組升序排列,也可以定義排序函數,改排序方式爲降序

實現原理:sort不是簡單的快速排序,它對普通的快速排序進行了優化,此外,它還結合了插入排序和堆排序。系統會根據你的數據形式和數據量自動選擇合適的排序方法,這並不是說它每次排序只選擇一種方法,它是在一次完整排序中不同的情況選用不同方法,比如給一個數據量較大的數組排序,開始採用快速排序,分段遞歸,分段之後每一段的數據量達到一個較小值後它就不繼續往下遞歸,而是選擇插入排序,如果遞歸的太深,算法會選擇堆排序。

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

int main(){
	vector<int> test={5,4,3,2,1};
	sort(test.begin(),test.end());
	for(int i=0;i<test.size();i++){
		cout<<test[i]<<endl;
	}
	return 0;
}

輸出:
1
2
3
4
5

默認排序是從小到大,可以定義cmp函數使得排序變爲從大到小:

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

bool cmp(int a,int b){
	return a>b;
}

int main(){
	vector<int> test={1,2,3,4,5};
	sort(test.begin(),test.end(),cmp);
	for(int i=0;i<test.size();i++){
		cout<<test[i]<<endl;
	}
	return 0;
}

輸出:
5
4
3
2
1

參考:
https://www.cnblogs.com/stones-dream/p/10183210.html
https://www.cnblogs.com/icesunbo/p/11484046.html

copy模塊:

copy()和deepcopy():
copy只拷貝父對象,不會拷貝對象內部的子對象(例如list內嵌套的list)
deepcopy會拷貝父對象及其子對象

import copy

a=[1,2,[1,2]]
b=copy.copy(a)
c=copy.deepcopy(a)

a.append(3)
a[2].append(3)

print(a)
print(b)
print(c)

  輸出結果:
[1, 2, [1, 2, 3], 3]
[1, 2, [1, 2, 3]]
[1, 2, [1, 2]]

用內存地址的方式來理解:

import copy

a=[1,2,[1,2]]
b=copy.copy(a)
c=copy.deepcopy(a)

a.append(3)
a[2].append(3)

print(id(a))
print(id(b))
print(id(c))
print(id(a[2]))
print(id(b[2]))
print(id(c[2]))

輸出:
2311110878600
2311111048264
2311111048328
2311110991560
2311110991560
2311111048008

可以看出list中嵌套的list在copy後新的變量b中內存地址不變,而在deepcopy後新的變量c中內存地址改變。
注意copy或者deepcopy對不可變對象(數字或者元組等)使用時並不會創建新的內存地址,而是和賦值類似,將兩者指向同一塊內存地址。

參考:
https://blog.csdn.net/u011630575/article/details/78604226
https://www.cnblogs.com/richardzhu/p/4723750.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章