python入门第十五节迭代问题与pass语句

迭代问题

列表迭代问题

  • 列表内存自动管理:Python的列表会自动管理内存,当对列表插入元素或者删除元素时,列表会移动其中的元素以保证元素之间是连续的。

下面程序的输出结果是什么?

lst = [1, 2, 3]
for i in lst:
lst.remove(i)
print(lst)

为什么没有得到空列表?
如果原列表再内存中如下图在这里插入图片描述
第一次循环,取下标为0的元素,即 i = 1,再执行循环体,删除元素1,此时因为列表的内存会自动管理,即后面的所有元素都会自动往前靠,如下图:
在这里插入图片描述
第二次循环,取下标为1的元素,因为第一次循环导致元素的位置发生了改变,所以此时下标为1的元素并不是2,而变成了3,再执行循环体,就会删除元素3。
第三次循环,取下标为2的元素,找不到这样的元素,for循环自动停止。
在这里插入图片描述
如何才能把元素删完呢?

  • 思路:遍历一个元素和原列表一样新的可迭代对象即可
lst = [1, 2, 3]
new_iter = lst.copy()
# new_iter = lst[:]
# new_iter = list(lst)
# new_iter = tuple(lst)
for i in new_iter:
	lst.remove(i)
print(lst)

字典迭代问题

  • 字典、集合在迭代时,不允许改变原数据的size
d = {'name': 'Tom', 'age': 28, 'height': 177}
for k in d:
	print(d.pop(k))
	print(d)
	
s = {'a', 'b', 'c', 'd', 'f'}
for i in s:
	s.remove(i)
	print(s)
d = {'name': 'Tom', 'age': 28, 'height': 177}
new_iter = d.copy()
# new_iter = dict(d)
# new_iter = list(d)
# new_iter = tuple(d)
for k in new_iter:
	print(d.pop(k))
	print(d)
s = {'a', 'b', 'c', 'd', 'f'}
new_iter = s.copy()
# new_iter = set(s)
# new_iter = list(s)
# new_iter = tuple(s)
for i in new_iter:
	s.remove(i)
	print(s)

pass语句

  • pass 是一个关键字,表示一个空语句,当它被执行时,不做任何操作,通常用作占位符,在语法上需要语句但实际上不需要执行任何操作的情况下使用。
score = float(input('你这次考试考了多少分? '))
if score >= 90:
	print('厉害!')
elif score >= 80:
	pass
elif score >= 70:
	print('良好!')
elif score >= 60:
	...  #pass与...意义一样占位符不需要操作
else:
	print('不及格!')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙_尧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值