把每一个元素逐个地取出来,长度由字符串的长度所决定。
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(列表 | 字符串 |
取值 | [] | 列表[开始:结束:步长] | 正索引与负索引 |
查看长度 | len | len(列表) | |
切片 | [:] | [索引开始值:索引结束值] | 左到右,步长为整数;右到左,步长为负数 |
查找索引值 | 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]]