python 列表 元组 字典 集合
列表
lst = [i for i in range(10)]
切片
# 把下标小于2的显示出来 print(lst[:2]) # 把10个数有大到小输出 print(lst[::-1]) # 把下标为奇数的数字显示出来 print(lst[::2])
显示结果
[0, 1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[0, 2, 4, 6, 8]
当切片时,会生成新的内存来存储切之后的列表。
l1 = lst l2 = lst[::] print(id(lst)) # 2601618176520 print(id(l1)) # 2601618176520 print(id(l2)) # 2601618469128
列表生成器 —— 一个使你代码牛逼的利器
# 显示能被2整除的数字 l3 = [i for i in lst if i % 2 == 0] # 注意第一个i、第二个i和第3个i要相对应
嵌套列表
# 嵌套列表 lst = [1, [2, 3]] for i in lst: print(i) # 显示结果 # 1 # [2, 3]
for i in range(1, 4): for j in range(5, 7): print(i + j, end=" ") print()
显示结果
6 7
7 8
8 9
append追加
a = [2, 3, 5] a.append(100) print(a)
[2, 3, 5, 100]
a.pop() print(a)
[2, 3, 5]
b = [2, 4] a.extend(b) print(a)
[2, 3, 5, 2, 4]
浅拷贝
列表在存储嵌套列表时,l1 = [1, [2, 5, 6], 9]
[2, 5, 6]在l1的存储形式为[2, 5, 6]的指针
在浅拷贝时,拷贝的只是列表的连接
拷贝之后会形成新的地址
lst2 = lst.copy() print(id(lst)) print(id(lst2)) #2677879858952 #2677879858632
lst2[0] = 10 print(lst) print(lst2)
[1, [2, 5, 6], 9]
[10, [2, 5, 6], 9]
可以看到,lst2的第一个元素变成了10,而lst却没有改变
lst2[1][0] = 100 print(lst) print(lst2)
[1, [100, 5, 6], 9]
[10, [100, 5, 6], 9]
而此时lst2的第二个元素的第一个元素会变,但lst的元素也变了。
元组
tuple, 我个人认为元组就是一个简化了的列表,也许tuple有自己的功能,但我还是觉得,元组是为了节省空间而存在的。
创建一个空元组
t1 = () print(type(t1))
成员检测
t2 = (1, 2, 3) print(1 in t2) print(4 in t2)
但我为啥会说是简化的列表呢?
tuple与list的不同
list可以增删改
而tuple不可以,tuple
t2 = (1, 2, 3) t2.pop() print(t2)
当我把最后一个元素删除时,你会发现Python的解释器会报错,说明了元组不能自身实现增删改的操作。
字典
字典的创建和集合差不多,都用大括号,但字典使用的是键值对
创建一个字典:
d1 = {'one': 1, 'two': 2} print(d1)
显示结果为:{'two': 2, 'one': 1}
成员检测:
检测的是key键
print('one' in d1) print(1 in d1)
显示结果:
True
False
在存储是,字典会按照key进行哈希存储,所以只能检测key是否存在
字典的循环
for i in d1: print(i) # two # one for k in d1.keys(): print(k) # one # two for v in d1.values(): print(v) # 1 # 2 for k, v in d1.items(): print(k , '-----' , v) # one ----- 1 # two ----- 2
我们在取字典值的时候,可以使用get。
print(d1.get('one')) print(d1.get('three'))
显示结果
1
None
没有此键时,显示结果为None,而不会报错,而用d1['three']时,会报错。
集合
创建一个集合
s1 = {2, 3, 2, 4, 3, 2, 8} print(s1)
结果为:{8, 2, 3, 4}
说明了集合的一个作用是:去重,一个集合看起来基本上是无序的。
集合增加元素:
s1.add(1) print(s1)
集合删除元素:
如果能记住,建议用discard。当集合中没有此元素时,不会报错。
s1.discard(1) # 把集合中的1删除 print(s1) s1.discard(1) # 集合中已经没有1 但没有报错 print(s1)
也可以使用remove,但没有此元素时,会报错
集合适用于减法:
s3 = {2, 3, 4} s4 = {4, 5} print(s3 - s4)
显示结果为:{2, 3}
会把s3集合中的与s4相同的元素删除