- 1. 列表推导
- 1.1 使用列表推导得到笛卡尔积
- 1.2 过滤器的列表推导
- 1.3 列表和元组
- 2. 列表切片
- 3. 双向队列 deque
colors = ['white','black']
sizes = ['L','M','S']
t_shirt = [(color,size)for color in colors for size in sizes]
print(f"t_shirt={t_shirt}")
t_shirt=[('white', 'L'), ('white', 'M'), ('white', 'S'), ('black', 'L'), ('black', 'M'), ('black', 'S')]
1.2 过滤器的列表推导
symbol = "$¢£¥€¤"
# 含过滤器的列表推导 ord(sym)>163
list_0 = [ord(sym) for sym in symbol if ord(sym)> 163]
# 不含过滤器的列表推导
list_1 = [ord(sym) for sym in symbol]
print(f"list_0={list_0}")
# list_0=[165, 8364, 164]
print(f"list_1={list_1}")
# list_1=[36, 162, 163, 165, 8364, 164]
1.3 列表和元组
列表是可变变量,而元组是不可变量,在进行变量相乘的时候,列表的ID地址不变,而元组的ID地址会变
l = [1,2,3]
print(f"l={l}")
print(f"id(l)_before={id(l)}")
l *=2
print(f"l={l}")
print(f"id(l)after={id(l)}")
t =(1,2,3)
print(f"t={t}")
print(f"id(t)before={id(t)}")
t*=2
print(f"t={t}")
print(f"id(t)after={id(t)}")
- 结果:列表的ID没变,而元组的ID变了
l=[1, 2, 3]
id(l)_before=139782399953568
l=[1, 2, 3, 1, 2, 3]
id(l)after=139782399953568
t=(1, 2, 3)
id(t)before=139782400381888
t=(1, 2, 3, 1, 2, 3)
id(t)after=139782521148368
2. 列表切片
- 为什么列表和区间在切片过程中需要忽略最后一个元素;
(1)当只有最后一个位置信息的时候,我们可以快速看出切片和区间里面有多少个元素
(2)当起始位置都可见的时候,我们可以快速的查看含多少个元素(end-start)
(3)我们可以根据一个元素进行切割,将列表按照指定位置进行一分为二
my_list=[0,1,2,3,4,5,6]
print(f"my_list={my_list}")
# my_list=[0, 1, 2, 3, 4, 5, 6]
# 当列表中只有最后一个位置信息的时候,我们可以看到里面有三个元素
print(f"my_list[:3]={my_list[:3]}")
# my_list[:3]=[0, 1, 2]
# 可以快速的对列表进行分割,如可以在第3位置切割列表
print(f"my_list[3:]={my_list[3:]}")
# my_list[3:]=[3, 4, 5, 6]
# 当起始位置都可见的时候,我们忽略最后一个元素,可以快速查看有多少
# 可以看到从1开始到第4-1=3个,所以一共有3个元素;
# 分别为[1,2,3]
print(f"my_list[1:4]={my_list[1:4]}")
# my_list[1:4]=[1, 2, 3]
3. 双向队列 deque
from collections import deque
# 1.创建一个双向队列
dq = deque(range(10),maxlen=10)
print(f"dq_0={dq}")
# dq_0=deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)
# 2.向右拨动3下
dq.rotate(3)
print(f"dq_1={dq}")
# dq_1=deque([7, 8, 9, 0, 1, 2, 3, 4, 5, 6], maxlen=10)
# 3.向左波动4下
dq.rotate(-4)
print(f"dq_2={dq}")
# dq_2=deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], maxlen=10)
# 4.队列左侧增加一个元素-1,因为整体只能包含10个元素
# 所以右边的元素0就消失了
dq.appendleft(-1)
print(f"dq_3={dq}")
# dq_3=deque([-1, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)
# 5.队列右侧增加元素10,20,30,因为整体只能包含10个元素
# 所以左边[-1,1,2]就消失了
dq.extend([10,20,30])
print(f"dq_4={dq}")
# dq_4=deque([3, 4, 5, 6, 7, 8, 9, 10, 20, 30], maxlen=10)
# 6.队列左侧增加元素111,222,333,444,因为整体只能包含10个元素
# 所以右边的[9,10,20,30]就消失了
dq.extendleft([111,222,333,444])
print(f"dq_5={dq}")
# dq_5=deque([444, 333, 222, 111, 3, 4, 5, 6, 7, 8], maxlen=10)
# 7.appendleft和extendleft的区别在于appendleft是将列表[800,900,1000]当作一个元素
# 加入到队列中,而extendleft是将列表[800,900,1000]当作三个元素加入队列中
dq.appendleft([800,900,1000])
print(f"dq_6={dq}")
# dq_6=deque([[800, 900, 1000], 444, 333, 222, 111, 3, 4, 5, 6, 7], maxlen=10)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)