2018-12-26 2-12 Python基础-08-内建结构listdictset

第二章 语法基础

课时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

你可能感兴趣的:(2018-12-26 2-12 Python基础-08-内建结构listdictset)