第二章 语法基础
课时12 Python基础-08-内建结构listdictset
1.list列表(续)
a) 传值与传址的区别:
#代码
def a(n):
n[2] = 300
print(n)
return None
def b(n):
n += 100
print(n)
return None
an = [1,2,3,4,5]
bn = 9
print(an)
a(an)
print(an)
print(bn)
b(bn)
print(bn)
#效果
[1, 2, 3, 4, 5]
[1, 2, 300, 4, 5]
[1, 2, 300, 4, 5]
9
109
9
b) 关于列表的函数
-
append
追加内容
#代码
a = [i for i in range(1,5)]
print(a)
a.append(10)
print(a)
#效果
[1, 2, 3, 4]
[1, 2, 3, 4, 10]
-
insert
插入内容
语法:insert(index,data)
#代码
a = [i for i in range(1,5)]
print(a)
a.insert(3,666)
print(a)
#效果
[1, 2, 3, 4]
[1, 2, 3, 666, 4]
-
pop
从最后一位弹出一个元素
#代码
a = [i for i in range(1,5)]
print(a)
last_ele = a.pop()
print(last_ele)
print(a)
#效果
[1, 2, 3, 4]
4
[1, 2, 3]
-
remove
在列表汇中删除指定元素
区别:del
删除指定位置的元素
#代码
a = [i for i in range(1,5)]
print(a)
print(id(a))
a.remove(3)
print(a)
print(id(a))
#效果
[1, 2, 3, 4]
139984802766792
[1, 2, 4]
139984802766792
-
clear
清空列表中所有元素
#代码
a = [i for i in range(1,5)]
print(a)
print(id(a))
a.clear()
print(a)
print(id(a))
#效果
[1, 2, 3, 4]
139984802022088
[]
139984802022088
区别于:
#代码
a = [i for i in range(1,5)]
print(a)
print(id(a))
a = list()
print(a)
print(id(a))
#效果
[1, 2, 3, 4]
139984802137480
[]
139984801518920
-
reverse
逆序
#代码
a = [i for i in range(1,5)]
print(a)
print(id(a))
a.reverse()
print(a)
print(id(a))
#效果
[1, 2, 3, 4]
139984802000264
[4, 3, 2, 1]
139984802000264
-
extent
拼接两个列表
#代码
a = [i for i in range(1,5)]
b = [i for i in range(6,10)]
print(a)
print(id(a))
a.extend(b)
print(a)
print(id(a))
#效果
[1, 2, 3, 4]
139984801077384
[1, 2, 3, 4, 6, 7, 8, 9]
139984801077384
-
count
查找列表中指定指定元素的个数
#代码
a = [1,2,2,3,3,3,4,4,5,5]
a_count = a.count(3)
print(a_count)
#效果
3
-
copy
俗称“浅拷贝”(传值)
#代码
a = [1,2,3,4,5,66]
b = a.copy()
b[3] = 77
print(a)
print(id(a))
print(b)
print(id(b))
#效果
[1, 2, 3, 4, 5, 66]
139984802651400
[1, 2, 3, 77, 5, 66]
139984802076936
注意:赋值符号=
在下方为传址操作
#代码
a = [1,2,3,4,5,66]
b = a
b[3] = 77
print(a)
print(b)
#效果
[1, 2, 3, 77, 5, 66]
[1, 2, 3, 77, 5, 66]
- (续上)浅拷贝:只拷贝一层,列中的子列仍然为传址操作
#代码
a = [1,2,3,[10,20,30]]
b = a.copy()
print(id(a))
print(id(b))
print(id(a[3]))
print(id(b[3]))
print("*"*20)
b[3] = [0,0,0]
print(a)
print(b)
print(id(a))
print(id(b))
#效果
139984802076552
139984803127624
139984802145864
139984802145864
********************
[1, 2, 3, [10, 20, 30]]
[1, 2, 3, [0, 0, 0]]
139984802076552
139984803127624
深拷贝:暂时略过,以后再讲
c) tuple
元组:可以视作为不可写操作的list
1.元组的创建
- 创建空元组
#代码
t = ()
print(type(t))
#效果
- 创建只有一个元素的元组
#代码
t = (1,)
s = (1)
r = 1,
print(type(t))
print(t)
print(type(s))
print(s)
print(type(r))
print(r)
#效果
(1,)
1
(1,)
- 创建多个元素的元组
#代码
t = 1,2,3
s = (1,2,3)
print(type(t))
print(t)
print(type(s))
print(s)
#效果
(1, 2, 3)
(1, 2, 3)
- 其他创建方法
#代码
l = [i for i in range(1,5)]
t = tuple(l)
print(type(t))
print(t)
#效果
(1, 2, 3, 4)
2.元组的特性
list
所具有的特性、可执行的操作,tuple
都具有、可执行(但tuple
不可以修改)
- 内容不可修改
#代码
t = (1,2,3)
t[1] = 0
print(t)
#效果
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in ()
1 t = (1,2,3)
----> 2 t[1] = 0
3 print(t)
TypeError: 'tuple' object does not support item assignment
- 切片
#代码
t = 1,2,3,4,5,6
t1 = t[1::2]
print(id(t))
print(id(t1))
print(t1)
print(type(t))
print(type(t1))
#效果
139984803002792
139984803077360
(2, 4, 6)
- 相加
此处为传址操作,相当于对t1
进行重新赋值,因此可以正常操作
#代码
t1 = 1,2,3
t2 = 4,5,6
print(id(t1))
t1 += t2
print(id(t1))
print(t1)
#效果
139984803075704
139984802946792
(1, 2, 3, 4, 5, 6)
- 元组相乘
#代码
t = (1,2,3)
t = t*3
print(t)
#效果
(1, 2, 3, 1, 2, 3, 1, 2, 3)
- 成员检测
#代码
t = (1,2,3)
if 2 in t:
print("YES")
else:
print("NO")
#效果
YES
- 元组的遍历,一般采用
for
1.单层元组遍历
#代码
t = 1,2,"2131"
for i in t:
print(i)
#效果
1
2
2131
2.双层元组的遍历
#代码
t =(1,2,3),(3,4,5)
for i in t:
print(i)
for k,m,n in t:
print(k,"---",m,"---",n)
#效果
(1, 2, 3)
(3, 4, 5)
1 --- 2 --- 3
3 --- 4 --- 5