欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python系统学习第八课

程序员文章站 2022-07-09 23:29:52
...
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'>