流畅的python-2

本文介绍了Python编程中的几个重要概念,包括使用列表推导式生成笛卡尔积和过滤列表,元组与列表的区别,列表切片的操作,以及双向队列deque的创建、旋转和扩展操作。此外,还展示了如何使用zip函数结合字典生成器表达式创建字典。这些内容对于理解和提升Python编程技能非常有帮助。
摘要由CSDN通过智能技术生成

1. 列表推导

1.1 使用列表推导得到笛卡尔积

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)

4. zip

name=['zhangsan','lisi','wangwu','maliu']
color = ['black','white','blue','yellow']
dict1 = {i:j for i,j in zip(name,color)}
print(f"dict1={dict1}")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值