Python系统学习第八课

def fun(n):
    n[2] = 100
    print(n)
    return None

def fun2(n):
    n = 11
    print(n)
    return None

a = [1,2,3,4,5,6]
print(a)
fun(a)
print(a)

b = 2
print(b)
fun2(b)
print(b)

#这里有一个问题就是,上边一个函数,把列表传入之后,已经改变了原先列表的值,下边的函数把值传入之后并没有改变函数的值。这个问题需要重视!!!
#这个可能是传址和传值的区别问题,就是说,可能是针对列表传的是地址,针对数值传的是数值
#对于复杂变量采用的是传址操作
[1, 2, 3, 4, 5, 6]
[1, 2, 100, 4, 5, 6]
[1, 2, 100, 4, 5, 6]
2
11
2

#关于列表的函数

#使用append函数,在末尾加入
a =[ i for i in range(1,10)]
print(a)
a.append(0)
print(a)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
#使用insert函数,在指定位置插入
a =[ i for i in range(1,10)]
print(a)
a.insert(2,666)
print(a)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 666, 3, 4, 5, 6, 7, 8, 9]
# 删除
#del
#pop
print(a)
last = a.pop()  #列表最后一个值弹出来
print(last)
print(a)
[1, 2, 666, 3, 4, 5, 6, 7, 8, 9]
9
[1, 2, 666, 3, 4, 5, 6, 7, 8]
#del函数删除指定位置的值
print(a)
del(a[2])
print(a)
[1, 2, 666, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
#remove函数删除指定值的元素,如果列表中没有这个值那么会报错
print(a)
print(id(a))
a.remove(6)
print(a)
print(id(a))

#两个id都一样,说明他们是在同一个列表上进行的操作
[1, 2, 3, 4, 6, 7, 8]
2237185452552
[1, 2, 3, 4, 7, 8]
2237185452552
#clear 函数
#把函数内容全部清空了,但是列表依然存在,只是没有数值元素
print(a)
print(id(a))
a.clear()
print(a)
print(id(a))
[]
2237185452552
[]
2237185452552
#reverse翻转函数,翻转并不会创建新列表,原地翻转
a = [ i for i in range(1,10)]
print(a)
print(id(a))
a.reverse()
print(a)
print(id(a))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
2237185708808
[9, 8, 7, 6, 5, 4, 3, 2, 1]
2237185708808
#extend:扩展列表,两个列表,把后一个直接拼接到前一个上
a = [1,2,3,4,5]
b = [11,22,33]
a.extend(b)
print(a)
c = a + b   #两种方法都可以
print(c)
[1, 2, 3, 4, 5, 11, 22, 33]
[1, 2, 3, 4, 5, 11, 22, 33, 11, 22, 33]
#count :查找列表中指定值或者元素的个数
print(c)
num = c.count(11)
print(num)
[1, 2, 3, 4, 5, 11, 22, 33, 11, 22, 33]
2
#copy:拷贝,只是浅拷贝函数,只拷贝一层内容,深拷贝需要特定的工具。
a = [1,2,3,4,5]
print(a)
b = a
b[2] = 10
print(a)   #传地址操作
print(id(a))
print(b)
print(id(b))
b = a.copy()   #这样复制之后,就成了两个列表,修改一个对另一个没有影响。
print(a)
print(id(a))
print(b)
print(id(b))
[1, 2, 3, 4, 5]
[1, 2, 10, 4, 5]
2237185761864
[1, 2, 10, 4, 5]
2237185761864
[1, 2, 10, 4, 5]
2237185761864
[1, 2, 10, 4, 5]
2237185857096
#深拷贝和浅拷贝的区别
a = [1,2,3,[1,2,3,4]]
b = a.copy()
print(id(a))
print(id(b))  #两个id不同,说明copy成为不同列表
print(id(a[3]))   #但是两个id是一样的,说明这时候更改一个值,另外一个值也会跟着改变
print(id(b[3]))
a[3][2] = 666
print(a)
print(b)    #这是一个双层列表,copy的只是一层列表,还有一层列表没有copy。
#以上说明,copy拷的只是列表a中的四个元素的地址,而第四个元素的地址却指向了另外四个元素。所以,copy函数只是拷贝了一层。
2237185452872
2237185765000
2237185761352
2237185761352
[1, 2, 3, [1, 2, 666, 4]]
[1, 2, 3, [1, 2, 666, 4]]

#元组-tuple

  • 元组可以看做是一个不可更改的list
  • 有序列表
  • 元组数据可以访问,但是不可修改
  • 元组数据类型可以是任意类型
  • list的所有特性,除了可以不可修改,元组都具有,也就意味着,list具有的一些特性,比如索引,分片,序列相加,相乘,成员资格操作等都一样
# 元组创建
t = ()
print(type(t))
t2 = (1)  
print(type(t2))
t3 = (1,)   # 必须要有一个逗号才可以成为一个元组,否则就成为了一个整型变量
print(type(t3))
t4 = (1,2,3,4,5)
print(type(t4))
t5 = 1,2,3,4,5   #不加括号也是可以的
print(type(t5))
#使用其他结构创建
a = [1,2,3,4]
b = tuple(a)
print(b)
print(type(b))
<class 'tuple'>
<class 'int'>
<class 'tuple'>
<class 'tuple'>
<class 'tuple'>
(1, 2, 3, 4)
<class 'tuple'>

猜你喜欢

转载自blog.csdn.net/qq_42633819/article/details/85691956