DW学习-Python基础04(列表)

本文详细介绍了Python中的列表操作,包括定义、查询、增加、删除和修改等。重点讲解了下标、切片、index()、count()、len()函数,以及append()、extend()、insert()、del、remove()、pop()、clear()、reverse()和sort()等方法。此外,还探讨了列表的深浅拷贝概念。最后,提供了若干练习题加深理解。

1 列表定义

  • 作用:列表可以一次性存储多个数据,且可以为不同数据类型。但是,建议使用同一类型。
  • 格式:变量名=[数据1,数据2,数据3,...] 中括号和逗号
  • 注意:列表属于可变类型
m=[1.1,"hello",["bingo",10],20]
print(type(m))	# <class 'list'>
print(m)	# [1.1, 'hello', ['bingo', 10], 20]

2 列表操作-查

查不改变列表

2.1列表的下标(索引)

  • 从0开始,最后一个元素的下标是-1。

【例子】

m=[1.1,"hello",["bingo",10],20]
print(m[2])	# ['bingo', 10]
print(m[-1])	# 20
print(m[2][1])	# 10

2.2 切片

  • 语法:序列[开始位置下标:结束位置下标:步长] 不包含结束位置下标。

【例子】

m=[1.1,"hello",["bingo",10],20]
print(m[1:3])	# ['hello', ['bingo', 10]]
print(m[-2:-1])	# [['bingo', 10]]
print(m[1:3:2])	# ['hello']

2.3 index()函数

  • 作用:查找指定元素是否在列表中
  • 语法:变量名.index(数据,开始位置下标,结束位置下标),找到就返回第一个匹配项位置下标,找不到报错。和字符串里一样的用法一样。

【例子】

m=[1.1,"hello",["bingo",10],20]
print(m.index(20))	# 3
print(m.index(1))	# 报错

2.4 count()函数

  • 作用:统计指定数据在列表中出现的次数。
  • 语法:变量名.count(数据),没有返回0

【例子】

m=[1.1,"hello",["bingo",10,20],20]
print(m.count(20))	# 1
print(m.count(1))	# 0

2.5 len()函数

  • 作用:返回列表长度
  • 语法:len(变量名)

【例子】

m=[1.1,"hello",["bingo",10,20],20]
print(len(m))	# 4

3 列表操作-增

增会改变列表

3.1 append()函数

  • 作用:在列表结尾追加数据(追加的是单个数据
  • 语法:变量名.append(数据)

注意:不能一次追加多个数据,增加多个数据是将整个序列追加到序列。

【例子】

m=[1.1,"hello",["bingo",10],20]
m.append('World')	
m.append(['haha','hoho'])	# [1.1, 'hello', ['bingo', 10], 20, 'World', ['haha', 'hoho']]
print(m)

3.2 extend()函数

  • 作用:在列表结尾追加数据(追加多个数据)多个数据要用列表来存
  • 语法:变量名.extend(数据)

【例子】

m=[1.1,"hello",["bingo"],20]
m.extend(['a','b'])
print(m)	# [1.1, 'hello', ['bingo'], 20, 'a', 'b']

3.3 insert()函数

  • 作用:在指定位置新增数据
  • 语法:变量名.insert(位置下标,数据)

【例子】

m=[1.1,"hello",["bingo"],20]
m.insert(2,'World')
print(m)	# [1.1, 'hello', 'World', ['bingo'], 20]

4 列表操作-删

删会改变列表

4.1 del

  • 没有下标,删除整个变量名,再打印就没有这个变量名了,要重新写。
  • 有下标,删除指定列表位置的数据
  • 语法:del 变量名[下标]
    【例子】
m=[1.1,"hello",["bingo"]]
del m[1]
print(m)	# [1.1, ['bingo']]

4.2 remove()函数

  • 作用:除列表中某个值的第一个匹配项
  • 语法:变量名.remove(指定数据)
    【例子】
m=[1.1,1.1"hello",["bingo"]]
m.remove(1.1)
print(m)	# [1.1,'hello', ['bingo']]

4.3 pop()函数

  • 作用:移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
  • 语法:变量名.pop(下标)

【例子】

m=[1.1,"hello",["bingo"]]
s=m.pop()
print(m)	# [1.1, 'hello']
print(s)	# ['bingo']

4.4 clear()函数

  • 作用:清空列表
  • 语法:变量名.clear(),返回结果是[]

【例子】

m=[1.1,"hello",["bingo"]]
m.clear()
print(m)	# []

5 列表操作-改

改会变量列表

5.1 修改指定下标数据

m=[1.1,"hello",["bingo"]]
m[1]=2
print(m)

5.2 reverse()函数

  • 作用:反向排列列表中元素
  • 语法:变量名.reverse()
m=[1.1,"hello",["bingo"]]
m.reverse()
print(m)	# [['bingo'], 'hello', 1.1]

5.3 sort()排序

  • 作用:对整个列表进行排序。列表里的数据必须是相同类型的。
  • 语法:变量名.sort(key=None,reverse=False),默认是升序,降序为True。
    • key :主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    • reverse:排序的方式,默认是升序,Ture为降序。
m=[1.1,"hello",["bingo"]]
m.sort(reverse=False)
print(m)
#TypeError: '<' not supported between instances of 'str' and 'float'
------------
m=['nihaoa',"hello",'haha']
m.sort(reverse=False)
print(m)	# ['haha', 'hello', 'nihaoa']
----------
m=[1,5,8,9,2,2,10]
m.sort(reverse=True)
print(m)	# [10, 9, 8, 5, 2, 2, 1]
-------------------
a=[[6,5],[3,7],[2,8]]
a.sort()
print(a) # [[2, 8], [3, 7], [6, 5]]

6 补充

6.1 列表的深浅拷贝

  • 1.直接赋值:两个列表分割不开,一个列表改变另一个列表也随之改变。直接赋值相当于两个不同的列表名,指向就是同一个地址。
    在这里插入图片描述
list1=['egon','lxx',[1,2]]
list2=list1
print(id(list1),id(list2))
# 2034260507456 2034260507456
  • 2.浅拷贝不能完全分隔开,对于列表中的可变类型数据,一个更改另一个也随之更改。(浅拷贝相当于,拷贝的那个新列表重新拥有一个新的内存地址,里面数据的内存地址还是和之前相同。当被拷贝的列表中的不可变类型数据改变时,因为需要重新一个新的内存地址,所以新列表中的内存地址还是指向原来的不可变类型数据;但是当被拷贝的列表中的可变类型数据发生改变时,因为内存地址不变,所以新列表中的可变类型数据也随之改变(内存地址是一样的)。)
    在这里插入图片描述
list1=['egon','lxx',[1,2]]
list2=list1.copy()
print(id(list1),id(list2))
list1[0]='Egon'
list1[1]='LXX'
list1[2][0]=111
list1[2][1]=222
print(list1,id(list1[0]),id(list1[1]),id(list1[2]))
print(list2,id(list2[0]),id(list2[1]),id(list2[2]))
'''
2021595675456 2021595955008
['Egon', 'LXX', [111, 222]] 2021595954736 2021595954864 2021595672896
['egon', 'lxx', [111, 222]] 2021595954608 2021595954672 2021595672896
'''
  • 3.深拷贝可以完全分隔开。和浅拷贝不同的,就是对于列表中不同类型的数据,进行区别对待。对于新的拷贝的列表列表中的可变类型数据,会给一个新的内存地址用来存放,这样当被拷贝的列表中的可变类型数据发生改变时,新的列表不会发生改变。
    • 语法:import copycopy.deepcopy(列表名)
      在这里插入图片描述
import copy
list1=['egon','lxx',[1,2]]
list2=copy.deepcopy(list1)
print(id(list1),id(list2))
list1[0]='Egon'
list1[1]='LXX'
list1[2][0]=111
list1[2][1]=222
print(list1,id(list1[0]),id(list1[1]),id(list1[2]))
print(list2,id(list2[0]),id(list2[1]),id(list2[2]))
'''
2115233661312 2115233834240
['Egon', 'LXX', [111, 222]] 2115233594800 2115233594992 2115233663552
['egon', 'lxx', [1, 2]] 2115233594672 2115233594736 2115233833600
'''

7 习题

  • 1列表操作练习
    列表lst 内容如下
    lst = [2, 5, 6, 7, 8, 9, 2, 9, 9]
    请写程序完成下列操作:
    1 在列表的末尾增加元素15
    2.在列表的中间位置插入元素20
    3.将列表[2, 5, 6]合并到lst中
    4.移除列表中索引为3的元素
    5.翻转列表里的所有元素
    6.对列表里的元素进行排序,从小到大一次,从大到小一次
lst = [2, 5, 6, 7, 8, 9, 2, 9, 9]
lst.append(15)
print(lst)
lst.insert(5,20)
print(lst)
lst.extend([2,5,6])
print(lst)
del lst[3]
print(lst)
lst.reverse()
print(lst)
lst.sort(reverse=False)
print(lst)
lst.sort(reverse=True)
print(lst)
'''
[2, 5, 6, 7, 8, 9, 2, 9, 9, 15]
[2, 5, 6, 7, 8, 20, 9, 2, 9, 9, 15]
[2, 5, 6, 7, 8, 20, 9, 2, 9, 9, 15, 2, 5, 6]
[2, 5, 6, 8, 20, 9, 2, 9, 9, 15, 2, 5, 6]
[6, 5, 2, 15, 9, 9, 2, 9, 20, 8, 6, 5, 2]
[2, 2, 2, 5, 5, 6, 6, 8, 9, 9, 9, 15, 20]
[20, 15, 9, 9, 9, 8, 6, 6, 5, 5, 2, 2, 2]

Process finished with exit code 0

'''
  • 2.修改列表
    问题描述:
    lst = [1, [4, 6], True]
    请将列表里所有数字修改成原来的两倍
lst = [1, [4, 6], True]
lst[0]=2
lst[1][0]=8
lst[1][1]=12
print(lst)
# [2, [8, 12], True]
  • 3 eetcode 852题 山脉数组的峰顶索引
    如果一个数组k符合下面两个属性,则称之为山脉数组
    1.数组的长度大于等于3
    2.存在 i i i i i i >0 且 i < len ⁡ ( k ) − 1 i<\operatorname{len}(k)-1 i<len(k)1, 使得 k [ 0 ] < k [ 1 ] < … < k [ i − 1 ] < k [ j ] > k [ i + 1 ] … > k [ len ⁡ ( k ) − 1 ] \mathrm{k}[0]<\mathrm{k}[1]<\ldots<\mathrm{k}[\mathrm{i}-1]<\mathrm{k}[\mathrm{j}]>\mathrm{k}[\mathrm{i}+1] \ldots>\mathrm{k}[\operatorname{len}(\mathrm{k})-1] k[0]<k[1]<<k[i1]<k[j]>k[i+1]>k[len(k)1]
    这个 i i i就是顶峰索引。
    现在,给定一个山脉数组,求顶峰索引。
    示例:
    输入:[1, 3, 4, 5, 3]
    输出:True
    输入:[1, 2, 4, 6, 4, 5]
    输出:False
class Solution(object):
    def peakIndexInMountainArray(self, A):
        """
        :type A: List[int]
        :rtype: int
        """
        for i in range(len(A)):
            if A[i] > A[i+1]:
                return i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值