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

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