Python 基础

Python 中的列表
list
Python中内置的就是 list,这是一种有序列表
变量 city就是一个列表,用len()函数可以获得list元素的个数:
用索引访问 list中的元素,是从 [0]开始的
如果超出索引范围,python会报错,要记得最后一个元素的索引是len(city) - 1
以此类推,可以获取倒数第2个、倒数第3个
list是一个有序列表,我们可以追加元素到末尾,也可以加到前面。
可以使用 city.pop()的方法删除末尾元素,要删除指定位置的元素可以使用pop(i),其中的i是序号,比如删除武汉可以使用 city.pop(0)
我们也可以把某个元素替换为别的元素,比如把 武汉 替换为 北京
list 里面的数据类型也可以不同,比如 a = ['小明', 123, False]
list 里面的元素也可以是另一个 list,比如 b = ['apple', ['red', 'green', 'blue'], 0.12, True],当我们使用 len(b)可以发现实际上只有4个元素,因为里面的b[1]被当作了一个元素
如果要拿到 b[1]中的第一个元素 red可以使用 b[1][0]
如果list中一个元素都没有,则 len()就是0
tuple
另一种有序列表就是 tuple,它与 list非常类似,但是它不能想 list那样可以修改,一旦初始化后就无法更改。
| |
不过我们可以正常的使用[i]来获取其中的元素
如果你要在 tuple中定义一个元素,你像这么定义:
上述方法定义的不是1而是1这个数,因为在python中规定,() 既可以表示 tuple 也可以表示数学中的小括号,为了消除歧义,你可以令 a = (1,)则会输出 (1,) ,为了避免产生误解 python会在后面加上一个逗号
tuple 可以极大的保护我们的系统不被篡改,但是如果你想使用一个可变的 tuple,可以这样:
表面上看确实是 tuple中的元素发生了改变, 但是实际上是里面的 list 发生了改变
Python 中的格式化
常见的占位符
| 占位符 | 替换内容 |
|---|---|
| %d | 整数 |
| %f | 浮点数 |
| %s | 字符串 |
| %x | 十六进制整数 |
| 其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数: |
在第一个例子中,%2d 表示宽度为2的整数,如果整数位数不足2位,会在前面填充空格。
%02d 表示宽度为2的整数,如果整数位数不足2位,会在前面填充0。
在第二个例子中,%.2f则表示小数点前两位的浮点数
如果你实在不确定到底应该用什么,那么可以使用 %s,它将永远起作用
如果你想使用 %这个符号怎么办?你可以是使用转义 %%
{% note warning simple %}
如果你使用 'growth rate: %d %%' 7 % 则会
| |
{% endnote %}
format()
另一种方法比前一种要复杂的多,它使用传入的参数依次替换字符串内的占位符 {0},{1} ……
这里的 {0}对应的是 小明,而 {1:.1f} 实际上就是 {1} 和 .1f加起来的意思, .1f代表保留一位小数的浮点数
f-string
最后一种方式就是 f开头的字符串,如果变量中存在 {xxx},那么就会以对应的变量替换
在上述代码中, {l},{w}被变量 l和w替换,{s:.2f}被变量s的值替换,并且:后面的.2f指定了格式化参数(即保留两位小数)
dict和set
python里面内置了字典,例如我们要查看某些同学的成绩,你也许会这么写:
然后给定一个名字,再在list里面查找,这样的效率极低,且很慢,所以我们可以这样:
除了把数据通过初始化放入,我们也可以用 key放入
由于一个key只能对应一个值,在后面的值会把前面的冲掉,如果值不存在就会报错,比如 d['小力'],这显然不在dict里面。
我们可以利用两种方法来检查是不是存在这个值,第一种方法就是用 in
第二种则可以使用 get(),如果不存在就不会返回任何值,也就是 none,当然也可以定义一下,类似于-1例如
值得注意的是,列表不能作为 dict的健,因为 dict是不可变的哈希,而列表是可变的。
set
set与dict类似,都是一组key的集合,但是set只存储key,而dict存储key的值。
我们可以用 {x,y,z,...} 创建一组key, s = {1, 2, 3}
也可以提供一个list作为输入集合: s = set([1, 2, 3])
{% note info simple %}
显示的 {1, 2, 3} 只是告诉你里面有1,2,3这几个元素,显示的顺序也不是有序的。
{% endnote %}
set不会显示相同的键,也就是说:
set用于统计两种数据中有没有相同的元素有奇效,例如:
我们可以使用 add() 和 remove() 添加或移除 set 里面的元素,如:
不可变对象
我们之前讲过 str 是不可变对象,而 list 是可变对象.
比如我们对 list进行操作:
而对于不可变对象 str呢:
这样怎么理解?我们可以把 a.replace 当成另一个对象就很好理解了,比如引入 b = a.replace('a', 'A') ,这样就很直观了。
模式匹配
当我们要匹配某个特定的值而不是一个范围区间时,使用 if...else...肯定会过于复杂,可读性较差
如果学生的成绩只能是特定的值:
复杂匹配
第一个case x if x < 10表示当age < 10成立时匹配,且赋值给变量x,第二个case 10仅匹配单个值,第三个case 11|12|...|18能匹配多个值,用|分隔。
匹配列表
match语句还可以匹配列表,功能非常强大。
我们假设用户输入了一个命令,用args = ['gcc', 'hello.c']存储,下面的代码演示了如何用match匹配来解析这个列表:
| |
第一个case ['gcc']表示列表仅有'gcc'一个字符串,没有指定文件名,报错;
第二个case ['gcc', file1, *files]表示列表第一个字符串是'gcc',第二个字符串绑定到变量file1,后面的任意个字符串绑定到*files,它实际上表示至少指定一个文件;
第三个case ['clean']表示列表仅有'clean'一个字符串;
最后一个case _表示其他所有情况。
条件判断
Python可以自动化处理很多东西,其中绝大部分都是由条件判断组成的
比如,要识别考试分数是否及格:
当然这些只是粗略的判断,要是更细致的判断可以:
我们将s 的类型由 str 变成了 int ,如果不加这个
当然你也可以直接指定 s 为 int,例如 s = int(input('输入你的分数:'))
循环
Python的循环有两种,一种是for…in,例如:
它会依次打印出列表里面的所有元素
所以如果我们想求出1到10的总和可以使用 sum变量累加,如下:
但是要求1到1000的话使用这种方法会变得非常困难,所以我们可以用 range()生成一个整数序列,如 range(101) 就是从0到100,所以要求1到1000可以使用:
第二种循环就是 while,如果不满足就会一直运行,例如要计算100以内的奇数和:
break
如果要提前结束循环,可以使用 break语句,例如要打印1到100的数:
我们可以使用 break中断:
continue
在循环过程中我们可以通过 continue跳过当前的循环,例如下面的代码是打印1到10:
如果我们只想打印奇数的话:
里面的 %是取余数,==是比较,与=不同
参考资料 廖雪峰的Python教程 PDF 下载链接