
昨天我们学了操作符、控制流、函数、模块
坏蛋Dan:python简单入门--day2:运算符、控制流、函数、模块
今天我们来学数据结构
另外还是那句话,下面的内容会省略一些点,是面向有编程基础的(最好是前端)。
python有四种内置的数据结构,分别是list、tuple、dictionary以及set。
类似前端的数组或者后端的vector,可以增删改查,即动态的。
不过这里有一点需要注意,和前端的数组类似,python中的list也是类似对象/类的存在,这个list对象的字段是i,value就是i对应的元素。
这就很符合python中万物皆对象的理念了。
不多说,直接上例子
用法也几乎和js中的Array一样,不过这里需要注意,del是会直接影响到数组的长度的,这一点和js的不一样。
另外这个sort方法是基于timsort的,我之前有篇文章实现了这个timsort,是基于typescript的,感兴趣的可以去看下
元组这玩意儿前端只有typescript 里做了支持,一般都是后端语言有这个概念。
元组的长度是不可变的,但是它里面可以放不同类型的东西,甚至是再放一个tuple。
来看下例子
不过和List一样,Tuple也是序列(sequence),表示一系列的item。
括号可以不写,但是建议是加上。
字典字如其名,类似传统的对象,但是对象这个概念已经被用了,所以换了个词。用法自然也是对象的样子,直接看例子
我们创建的字典都是dist类的实例/对象
另外还有一点不同:不可以使用.来访问对应的key,.在python中是用来访问对象的属性的。
List、Tuple以及String都是sequence, 那么这个Sequence到底是个啥呢?
最主要的特性就是membership tests(比如in或者not in表达式)以及indexing operations即索引操作,允许我们通过下标找到对应的元素。
来看个例子
除了常规的操作外,你甚至可以传入负数,它会从length - x给你找对应的元素。
还可以做切割子序列的操作,在rust中管这叫做slice即切片。
这里还支持第三个参数,表示切片的step
传入负数表示倒序切
另外切片是新生成一个Sequence,而不是引用,相当于deep copy。
List、Tuple以及String都是基于Sequence的,所以它们都可以有上面的操作。
就和传统的Set一样,无序,可以去重。
其它不过多介绍了,到时候用多了自然就懂了。
前面说了字符串也是基于Sequence的,至于原理这里就不多说了,应该是和Rust中String为什么是一个集合的原理是差不多的。
另外字符串也是对象,它有自己的属性len和方法format等。
方法干的啥相信大家一眼就知道了,所以就不多说了。
那么我们这会儿学的差不多了,该搞个demo当作期中考试了。
写一个程序用来备份我们的import进来的文件。
我们现在直接上手写代码会有些无从下手的感觉。我们应该先将功能进行拆分,分为几个点来实现。
List里zip压缩zip这个指令(GNU/Linux/Unix自带)zip(windows)在开始写代码之前,window用户先往这里看:http://gnuwin32.sourceforge.net/downlinks/zip.php
需要自行下载、安装zip工具才行,安装完之后还得把这个工具加到环境变量中。
完事后新开一个终端输入zip,如果有以下显示
那就表示安装成功了,但是如果你输入后返回"zip不是可执行程序"。那么建议你把整个vscode重启了,或者干脆直接重启电脑。
我们重新创建一个文件,就叫backup_main.py
我们把同文件夹里的index.py文件作为备份对象,压缩放到当前目录下。
然后基于os.system让操作系统执行zip -r ${path} ${backup_target}
如果存放备份的文件不存在,那么这个时候就创建target文件夹。
然后我们再看到我们当前文件夹里就多了一个当前时间的zip文件了。
os.spe: 分隔符,在window上是\\,而在unix上则是/time.strftime: 根据传入的格式返回当前时间,至于%Y%m%d这些东西表示什么我就不多说了,大家都懂。zip -r:这里的-r表示的是recursively,是否深度处理即包含所有的子孙文件。我们刚实现的小工具目前是直接用当前的时间作为压缩文件的名字,我们可以优化成:当前年月日/时间 即以日期为文件夹,时间为文件名字,这样我们就可以更好的分类了。
我们还可以进一步进行区分,用数字来区分虽然比较安全,但是不便于理解和阅读。
我们还可以提供一个输入入口给用户,让他们自定义文件的后缀,这样用户区分的时候会知道对应的压缩文件是用来干嘛的。
可以看到python的语法其实是比较简单的,几乎没什么很难理解的用法。
发布于 2023-04-02 17:53・IP 属地广东