这里是清安,写了挺久的python了。我也不能说自己基础很好,也只能算一般,所以本篇做一个基础知识小总结,看看哪些是不知道的。
数据结构
python的数据结构有哪些?
Number(数值),String(字符串),List(列表),Set(集合),Tuple(元组),Dictionary(Dict字典)
这其中又可以做一定的划分:
有序 | 无序 | |
可变 | 列表 | 字典、集合 |
不可变 | 字符串、元组 | 数值 |
数值
数值里面又包含了:int,float,bool,complex(复数)几种类型的数值。
数值是可以有操作的:
加:1+1-->2
减:2-1-->1
乘:1*1-->1
除:1/1-->1
取余:5%2-->2
取整:5//3-->1
字符串
上面说了,字符串是有序的,可以进行“+”,“*”运算,它是不可变的数据类型。具体学习可以参考python专栏模块里面的知识点。
那么字符串我们都知道有' ',跟" ",还有''' '''或者""" """。他们有什么区别呢?
' '跟" "是没什么区别的。唯有''' '''跟' '或者" "之间是有的。看个例子:
a = """aa
a"""
print(a)
b = 'aa' \
'' \
'a'
print(b)
# 打印的结果:
aa
a
aaa
再有的时候,你会看到一些a = r'qingan',这样前面带r或者\(上述例子)的这样的一个字符,表转意,能够让python准确的识别你的意思。
看看字符串的一些其他操作:
以a = 'qingan'为例
操作 | 示例 | 解释 |
分割 | a.split('g') ['qin', 'an'] | 以'g'为分割点,对字符串进行切割 |
替换 | a.replace('an','安') qing安 | 将字符串'an'替换成字符串'安' |
拼接 | '-'.join(a) q-i-n-g-a-n | 将整个字符串用'-'逐一重新拼接,生成一个新的字符串 |
格式化 | a = 'qing %s, %d'%('an', 0) qingan,0 | 格式化操作符,值得注意的是%d只能是整数 |
以上都是产生了一个新的字符串,而不是修改了字符串。
列表
列表是一个有序的列表,列表中的任意元素都是可以修改的,且可以是任意类型,也可以进行"+","*"的运算。
列表在python系列中讲的还是比较详细的,唯一没有讲到的就是数量统计:
a = ['qing','an','an']
操作 | 示例 | 解释 |
数量统计 | a.count('an') 2 | 统计'an'出现的次数 |
元组
元组也是有序的,但是它是不可变的。元组在python系列中讲的也是比较的全的了,基本上都已经概括完了,剩下了就是举一反三的运用了。所以说,赶紧去看看吧。
字典
字典是由一对{}组成的,这个叫花括号,至少在python中这么称呼。它有{'键':'值'}组成,也就是常说的键值对。它的优点在于访问速度比列表快。在3.6版本后可变并且无序的(往上走的python版本的字典是有序的)。字典在python系列中讲的实例还是比较多的,值得仔细学习学习。用法呢不充两个没有讲到的:
a = {"qingan":"男","age":"18"}
操作 | 示例 | 解释 |
删除 | a.popitem() {"qingan","男"} | 删除最后一个键值对 |
删除 | a.clear() | 清楚字典所有的键值对 |
集合
集合的元素是唯一的,它会自动去重。你可能会联想到数学中的集合,没错,特性类似,交集、并集、差集等。集合呢在python系列中讲的也是比较细致的一部分,去学习学习吧。
深拷贝和浅拷贝
赋值
a = ['a', 'b']
b = a
b[0] = 'c'
print(a, b)
"""['c', 'b'] ['c', 'b']"""
上述例子。在python中a列表是有一个内存地址的,当我们把b指向a的时候,b也就指向了a的内存地址。所以我们修改b的值的时候,a的值也就随之改变了。
浅拷贝
a = ['a', 'b', [1, 2]]
b = a.copy()
a[2][0] = 'qing'
print(a, b)
'''['a', 'b', ['qing', 2]] ['a', 'b', ['qing', 2]]'''
这里就是a是一个单独的内存地址,b在copy了a后重新生成了一个地址,但是,这仅限于表面现象,也就是上述所看到的字符串a,b,而嵌套在列表中的另一个列表依旧会受到影响,可以修改值,这就是浅拷贝。
深拷贝
import copy
a = ['a', 'b', [1, 2]]
b = copy.deepcopy(a)
a[2][0] = 'qing'
print(a, b)
'''['a', 'b', ['qing', 2]] ['a', 'b', [1, 2]]'''
深拷贝需要引入一个模块,深拷贝后,不管你在如何修改原来的变量a,b始终不会受到影响。