03 迭代循环、序列类型-列表、元祖

把每一个元素逐个地取出来,长度由字符串的长度所决定。

continue会执行 else;break则相反

#打印1到20,不包括偶数
for i in range(21):
    if i%2 == 0:
        continue
    print(i)
else:
    print('end')

1 for

1.1 range

例子 range(5,8,2)

参数例子
开始值5
结束值8
步长2
#打印步长为 10,从10开始90
lis = []
for i in range(10,91,10):
    lis.append(i)
print(lis)
print(type(lis))

1.2 迭代对象

如何判断是否迭代对象?
【答】—— dir(对象),结果是否有 iter

2 列表

功能方法例句说明
添加append列表.append()
指定位置添加insert列表.insert(开始,添加值)
批量添加extend列表.extend(列表字符串
取值[]列表[开始:结束:步长]正索引与负索引
查看长度lenlen(列表)
切片[:][索引开始值:索引结束值]左到右,步长为整数;右到左,步长为负数
查找索引值index列表.index(值)
删除pop, remove, del索引不能负数

取值

# 取值 > print 所有,如果[20,40,60.80],就打印
lis=[10, 20, 30, 40, 50, 60, 70, 80, 90]
lis_new=[]
for i in lis:
    if i in lis[1:8:2]:
        lis_new.append(i*10)
    else:
        lis_new.append(i)
print(lis_new)

切片

# 切片
>>> lis_new
[10, 200, 30, 400, 50, 600, 70, 800, 90]
>>> lis_new[0:2]
[10, 200]
>>> lis_new[1:6]
[200, 30, 400, 50, 600]
>>> lis_new[1:4]
[200, 30, 400]
>>> lis_new[-6:-2] #terbalik
[400, 50, 600, 70]
>>> lis_new[1:6:2]
[200, 400, 600]
#左到右,步长为整数
>>> lis_new[-6:-2:2]
[400, 600]
>>> lis_new[-6:-2:-2]
[]
# 右到左,步长为负数
>>> lis_new[-2:-6:-2]
[800, 600]

# 其他
>>> lis_new[0:20]
[10, 200, 30, 400, 50, 600, 70, 800, 90]
>>> lis_new[:]
[10, 200, 30, 400, 50, 600, 70, 800, 90]
>>> lis_new[0:]
[10, 200, 30, 400, 50, 600, 70, 800, 90]

添加元素

>>> li = ['a','b','c','d','e','f','g']
>>> li
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> li.append(1)
>>> li
['a', 'b', 'c', 'd', 'e', 'f', 'g', 1]
>>> 
>>> li.insert(2,3)
>>> li
['a', 'b', 3, 'c', 'd', 'e', 'f', 'g', 1]
>>> 
>>> li.extend('qwe')
>>> li
['a', 'b', 3, 'c', 'd', 'e', 'f', 'g', 1, 'q', 'w', 'e']
>>> li.extend(['qwe'])
>>> li
['a', 'b', 3, 'c', 'd', 'e', 'f', 'g', 1, 'q', 'w', 'e', 'qwe']

删除

>>> #删除
>>> li
['a', 'b', 3, 'c', 'd', 'e', 'f', 'g', 1, 'q', 'w', 'e', 'qwe']
>>> li.pop
<built-in method pop of list object at 0x000001753F1E2D88>
>>> li
['a', 'b', 3, 'c', 'd', 'e', 'f', 'g', 1, 'q', 'w', 'e', 'qwe']
>>> li.pop()
'qwe'
>>> li
['a', 'b', 3, 'c', 'd', 'e', 'f', 'g', 1, 'q', 'w', 'e']
>>> 
>>> li.pop(3)
'c'
>>> li
['a', 'b', 3, 'd', 'e', 'f', 'g', 1, 'q', 'w', 'e']
>>> 
>>> 
>>> li.remove('q')
>>> li
['a', 'b', 3, 'd', 'e', 'f', 'g', 1, 'w', 'e']
>>> 
>>> del li[-1:-4]
>>> li
['a', 'b', 3, 'd', 'e', 'f', 'g', 1, 'w', 'e']
>>> del li[0:3]
>>> li
['d', 'e', 'f', 'g', 1, 'w', 'e']
>>> li.clear()
>>> li
[]

删除注意事项

删除重复值
lis = [1,1,1,1,2,3,4]
for i in lis:
    if lis.count(i) > i:
        lis.remove(i)
print(lis)
>>> [1, 1, 2, 3, 4]

问题:从上表我们可以看出来,代码不能完全实现删除重复值的工作
原因:for 加上 "lis.remove(i)"导致“lis”列表值的坐标发生变化 。(请看以下图)
在这里插入图片描述

解决方案:
① 固定lis每个值在每次循环的坐标不变。——> 复制一份lis(命名为:lis_pos)
② 一直遍历,到 lis.count(i) 等于 1 ——> while()

# ① 固定lis每个值在每次循环的坐标不变。

lis = [1,1,1,1,2,3,4]
for i in lis.copy():
    if lis.count(i) > i:
        lis.remove(i)
print(lis)


# ② 一直遍历,到 lis.count(i) 等于 1
lis = [1,1,1,1,2,3,4]
for i in lis:
    while lis.count(i) > i:
        lis.remove(i)
print(lis)

更改列表

>>> li = [1,2,3,4,5]
>>> li
[1, 2, 3, 4, 5]
>>> li[0] = 'aaa'
>>> li
['aaa', 2, 3, 4, 5]
>>> 
>>> li[0:3] = 'abc'
>>> li
['a', 'b', 'c', 4, 5]
# 注意
>>> li[0:3] = ['abc']
>>> li
['abc', 4, 5]

其他方法

#复制
>>> li = [1,2,3]

>>> li_new = li.copy()
>>> li_new
[1, 2, 3]

# ID
>>> id(li_new)
1603081742984
>>> id(li)
1603081743752
>>> li_new
[1, 2, 3]
>>> li
[1, 2, 3]

筛选与统计

# sorted 不会改变原来数据
>>> li = [3,2,1]
>>> sorted(li)
[1, 2, 3]
>>> li
[3, 2, 1]


>>> li = ['a','c','b','d','e']
>>> li.sort()
>>> li
['a', 'b', 'c', 'd', 'e']
>>> 
>>> li.reverse()
>>> li
['e', 'd', 'c', 'b', 'a']
>>> 

>>> li = ['a','c','b','d','e']
>>> li.sort(reverse=True)
>>> li
['e', 'd', 'c', 'b', 'a']
>>> li.sort(reverse=False)
>>> li
['a', 'b', 'c', 'd', 'e']


>>> li = ['a','a','a','d','e']
>>> li.count('a')
3

2.1 列表推导式

应用:生成简单的代码

lis = [a for a in range(21) if a%2==0]
print(lis)

2 元组(tuple)

形式是否
是否更改
索引取值
切片
替换
index
统计
排序是>列表

3.1 元组拆包

>>> # tuple 定位
>>> tu = (1,2,3,4,5)
>>> a,b,c,d,e = tu
>>> a
1
>>> b
2


>>> tu
(1, 2, 3, 4, 5)
>>> a, b, c* = tu
SyntaxError: invalid syntax
>>> a, b, *c = tu
>>> a
1
>>> c
[3, 4, 5]

浅复制与深复制

项目浅复制深复制
① 复制-+
② 处理列表嵌套改变原列表+-
③ 实现lis.copy()导入copy模块> 用deepcopy()的命令
import copy
# 在列表嵌套的复制情况下,lis.copy()或浅复制会改变原始的列表,而深度复制则不会(详见以下代码)
lis = [1,1,1,[1,2,3]]

lis_copy = lis.copy()
lis_deepcopy = copy.deepcopy(lis)


lis_copy[3][1]= 33
print(lis_copy)
>>> [1, 1, 1, [1, 33, 3]]
print(lis)
>>> [1, 1, 1, [1, 33, 3]]
print(lis_deepcopy)
>>> [1, 1, 1, [1, 2, 3]]

下载:练习题

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值