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