【每天1分钟】PYTHON基础之数据类型-列表(操作)

【每天1分钟】PYTHON基础之数据类型-列表(操作)

上一篇,我们对PYTHON的列表与列表元素操作进行了分类,今天将开始依据分类详细描述,可以通过每天一分钟】PYTHON基础之数据类型-列表(总览)回顾分类内容。

  1. 列表创建
  • 使用“=”直接将一个列表赋值给变量即可创建列表对象

创建一个空列表

>>> a_list = []
>>> type(a_list)
<class 'list'>
>>> a_list
[]

创建一个非空列表

>>> a_list = [1, 'a', 'b']
>>> type(a_list)
<class 'list'>
>>> a_list
[1, 'a', 'b']
  • 使用list()创建列表

创建一个空列表

>>> a_list = list()
>>> type(a_list)
<class 'list'>
>>> a_list
[]

创建一个非空列表

>>> a_list = list((1, 'a', 'b'))
>>> type(a_list)
<class 'list'>
>>> a_list
[1, 'a', 'b']
  • 使用list()函数将元组、range对象、字符串或其他类型的可迭代对象类型的数据转换为列表
# 元组转列表
>>> a_list = list((3,5,7,9,11))
>>> type(a_list)
<class 'list'>
>>> a_list
[3, 5, 7, 9, 11]

# range对象转列表
>>> a_list = list(range(1,10,2))
>>> type(a_list)
<class 'list'>
>>> a_list
[1, 3, 5, 7, 9]

# 字符串转列表
>>> a_list = list('hello world!')
>>> type(a_list)
<class 'list'>
>>> a_list
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!']
  1. 列表删除

使用del命令删除整个列表,如果列表对象所指向的值不再有其他对象指向,Python将同时删除该值

>>> del a_list
>>> a_list
Traceback (most recent call last):
  File "<pyshell#31>", line 1, in <module>
    a_list
NameError: name 'a_list' is not defined
  1. 列表切片

切片适用于列表、元组、字符串、range对象等类型,但作用于列表时功能最强大。可以使用切片来截取列表中的任何部分,得到一个新列表,也可以通过切片来修改和删除列表中部分元素,甚至可以通过切片操作为列表对象增加元素。

切片使用2个冒号分隔的3个数字来完成:
第一个数字表示切片开始位置(默认为0)。
第二个数字表示切片截止(但不包含)位置(默认为列表长度)。
第三个数字表示切片的步长(默认为1),当步长省略时可以顺便省略最后一个冒号。
切片操作不会因为下标越界而抛出异常,而是简单地在列表尾部截断或者返回一个空列表,代码具有更强的健壮性。

  • 基本用法
>>> aList = [3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
>>> aList[::]                                             #返回包含所有元素的新列表
[3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
>>> aList[::-1]                                           #逆序的所有元素
[17, 15, 13, 11, 9, 7, 6, 5, 4, 3]
>>> aList[::2]                                            #偶数位置,隔一个取一个
[3, 5, 7, 11, 15]
>>> aList[1::2]                                           #奇数位置,隔一个取一个
[4, 6, 9, 13, 17]
>>> aList[3::]                                            #从下标3开始的所有元素
[6, 7, 9, 11, 13, 15, 17]
>>> aList[3:6]                                            #下标在[3, 6)之间的所有元素
[6, 7, 9]
>>> aList[0:100:1]                                        #前100个元素,自动截断
[3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
>>> aList[100:]                                           #下标100之后的所有元素,自动截断
[]
>>> aList[100]                                            #直接使用下标访问会发生越界
IndexError: list index out of range
  • 使用切片来原地修改列表内容
>>> aList = [3, 5, 7]
>>> aList[len(aList):] = [9]                              #在尾部追加元素
>>> aList
[3, 5, 7, 9]
>>> aList[:3] = [1, 2, 3]                                 #替换前3个元素
>>> aList
[1, 2, 3, 9]
>>> aList[:3] = []                                        #删除前3个元素
>>> aList
[9]
>>> aList = list(range(10))
>>> aList
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> aList[::2] = [0]*5                                    #替换偶数位置上的元素
>>> aList
[0, 1, 0, 3, 0, 5, 0, 7, 0, 9]
>>> aList[::2] = [0]*3                                    #切片不连续,两个元素个数必须一样多
ValueError: attempt to assign sequence of size 3 to extended slice of size 5
  • 使用del与切片结合来删除列表元素
>>> aList = [3,5,7,9,11]
>>> del aList[:3]                                         #删除前3个元素
>>> aList
[9, 11]
>>> aList = [3,5,7,9,11]
>>> del aList[::2]                                        #删除偶数位置上的元素
>>> aList
[5, 9]
  • 切片返回的是列表元素的浅复制
>>> aList = [3, 5, 7]
>>> bList = aList                                         #bList与aList指向同一个内存
>>> bList
[3, 5, 7]
>>> bList[1] = 8                                          #修改其中一个对象会影响另一个
>>> aList
[3, 8, 7]
>>> aList == bList                                        #两个列表的元素完全一样
True
>>> aList is bList                                        #两个列表是同一个对象
True
>>> id(aList)                                             #内存地址相同
19061816
>>> id(bList)
19061816
  • 所谓浅复制,是指生成一个新的列表,并且把原列表中所有元素的引用都复制到新列表中。 如果原列表中只包含整数、实数、复数等基本类型或元组、字符串这样的不可变类型的数据,一般是没有问题的。
>>> aList = [3, 5, 7]
>>> bList = aList[::]                                    #切片,浅复制
>>> aList == bList                                       #两个列表的元素完全一样
True
>>> aList is bList                                       #但不是同一个对象
False
>>> id(aList) == id(bList)                               #内存地址不一样
False
>>> bList[1] = 8                                         #修改其中一个不会影响另一个
>>> bList
[3, 8, 7]
>>> aList
[3, 5, 7]
  • 如果原列表中包含列表之类的可变数据类型,由于浅复制时只是把子列表的引用复制到新列表中,这样的话修改任何一个都会影响另外一个。
>>> x = [1, 2, [3,4]]
>>> y = x[:]
>>> x[0] = 5
>>> x
[5, 2, [3, 4]]
>>> y
[1, 2, [3, 4]]
>>> x[2].append(6)
>>> x
[5, 2, [3, 4, 6]]
>>> y
[1, 2, [3, 4, 6]]
  1. 列表排序
  • 使用列表对象的sort()方法进行原地排序,支持多种不同的排序方法。
>>> aList = [3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
>>> import random
>>> random.shuffle(aList)
>>> aList
[3, 4, 15, 11, 9, 17, 13, 6, 7, 5]
>>> aList.sort()                                 #默认是升序排序
>>> aList.sort(reverse = True)                   #降序排序
>>> aList
[17, 15, 13, 11, 9, 7, 6, 5, 4, 3]
>>> aList.sort(key = lambda x:len(str(x)))       #按转换成字符串的长度排序
>>> aList
[9, 7, 6, 5, 4, 3, 17, 15, 13, 11]
  • 使用内置函数sorted()对列表进行排序并返回新列表
>>> aList
[9, 7, 6, 5, 4, 3, 17, 15, 13, 11]
>>> sorted(aList)                                #升序排序
[3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
>>> sorted(aList,reverse = True)                 #降序排序
[17, 15, 13, 11, 9, 7, 6, 5, 4, 3]

使用列表对象的reverse()方法将元素原地逆序
>>> aList = [3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
>>> aList.reverse()
>>> aList
[17, 15, 13, 11, 9, 7, 6, 5, 4, 3]
  • 使用内置函数reversed()对列表元素进行逆序排列并返回迭代对象
>>> aList = [3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
>>> newList = reversed(aList)                    #返回reversed对象
>>> list(newList)                                #把reversed对象转换成列表
[17, 15, 13, 11, 9, 7, 6, 5, 4, 3]
>>> for i in newList:
           print(i, end=' ')                     #这里没有输出内容
                                                 #迭代对象已遍历结束
>>> newList = reversed(aList)                    #重新创建reversed对象
>>> for i in newList:
           print(i, end=' ')
17 15 13 11 9 7 6 5 4 3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值