序列解包

本文介绍了Python中的序列解包概念,包括如何从元组中解包键值对,以及解包的注意事项。讲解了如何使用'*'来处理多余元素,并展示了链式赋值的等价性和差异。此外,还详细阐述了增强赋值操作、条件语句的使用,如if-elif-else结构,以及比较运算符和成员资格运算符。同时,文章提到了断言在错误检查中的应用,以及while和for循环的实例。在循环部分,讲解了如何并行迭代、获取索引以及反向和排序后迭代的方法。

序列解包(可迭代对象解包)

定义:解包后得到的值存储到一系列变量中,然后对变量进行操作。

那么怎么解包呢?

比如从元组中获取一个键值对,通过方法popitem可以将元组解序。

key,value = scoundrel.popitem()
key=?
value = ?

注意:

要解包的序列包含的元素个数一定要和你等号左边列出的目标个数相同。

解决方法

可以用‘*’来收集多余的值,

a,b,*c=[1,2,3,4]
>>c
>[3,4]//这里的c变量他始终是一个序列,即使他的元素是一个
//而且这个*可以放在变量的任何位置

链式赋值

链式赋值是一种快捷方式,可将多哥变量关联到同一个值

x=y=[1,2,3]
//等价于
x=[1,2,3]
y=x
x is = y
//不等价于
x=[1,2,3]
y=[1,2,3]
x is not y

说明:is 检查的是两个对象是否相同(而不是相等),对于上面等价的部分,x和y指向同一个对象。可以用指针来理解,等价的是x和y都是同一个指针,而不等价的是不同的指针,但是两个指针指向地址各自的内容是相同的。

增强赋值

x+=2

条件和条件语句

首先是通过缩进来区分代码块的。if的条件需要用到bool值,
其他的和C++的比较像。

条件表达式
status="friend" if name.endwith("Gumby") else "stranger"

//条件为真就表达式的结果就是前面的,条件为假,表达式的结果就是后面的

elif子句就是else if的缩写,简单的说就是带有条件的else语句

更复杂的条件

1.比较运算符

这里需要注意,赋值运算等号和比较运算的双等号,对象是否相同可以用is来判断。
注意:不要将is用于数和字符串等不可变的基本值。
in成员资格运算符也可以用到条件语句中

字符串和序列的比较

1.字符串是根据字符的字母排列顺序进行比较的
2.出现大小写可以用lower方法将大写全部转换成小写来进行比较
3.注意and or not的使用

断言
if not condition
	crash program

对于一些异常检查,可以使用关键字assert来充当检查点

age=-1
assert 0<age<100,'the age must be realistic'

这可以在发生错误时直接跳转到这句话,方便错误检查和调试。

while循环

举个栗子吧

name=''
while not name
	name = input('Please enter your name:')
print('Hello,{}'.format(name))

for循环

注意:可迭代对象时可使用for循环来进行遍历对象的

一些迭代工具

1.并行迭代
//存在两个序列
name=['1','2','2']
age=['2','3','3']
//可以通过内置函数zip吧两个序列缝合起来,返回一个由元组组成的序列,然后通过list将其转换成列表
//如果想要迭代序列,可以在循环中解包
listzip(name,age)
for name,age in zip(name,age)
2.迭代时获取索引

如果你想要在迭代的同时获取他的索引,可能会用他的索引来修改他的值。
例如:

for string in strings
	if "xxx" in string
		index=strings.index(string)
		strings[index]='[censored]'

但是这种情况可能由点不严谨
改进如下:

int index = 0
for string in strings
	if 'sss' in string 
		string[index]='[censored]'
	index+=1

这种方式比较好
在进行改进

for index ,string in enumerate(strings)
	if 'ssss' in string :
	strings[index]='[censored]'

这个函数可以得带索引-值对,其中索引时自动提供的

3.反向迭代和排序后再迭代

sorted返回的是一个排序后的列表,而reversed返回的是一个神秘的可迭代的对象,可以对他进行for循环,但是不能对他进行执行索引或者切片操作,也不能进行调用列表的操作,如果想要进行这些操作需要用list对他进行转换

跳出循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值