Python教程

Python巩固基础02-基本数据类型之List列表类型详解

本文主要是介绍Python巩固基础02-基本数据类型之List列表类型详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

创建列表

最普通的创建列表

>>> my_l = [1, 2, 3, 'a', 'b', 'c']
>>> my_l
[1, 2, 3, 'a', 'b', 'c']

使用list()将其他序列转换为列表

>>> s = 'hello'
>>> a = list(s)
>>> a
['h', 'e', 'l', 'l', 'o']

使用列表生成式创建列表

>>> my_l = [i for i in range(10)]  # 生成一个[0, 10)的列表
>>> my_l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> my_l = [i for i in range(10) if i % 2 == 0]  # 生成一个[0, 10)间的偶数列表
>>> my_l
[0, 2, 4, 6, 8]
>>> my_l = [i if i % 2 ==0 else -1 for i in range(10)]  # 生成一个[0, 10)的列表,其中偶数保持原样,奇数变为-1
>>> my_l
[0, -1, 2, -1, 4, -1, 6, -1, 8, -1]

列表切片

内容参考豌豆花下猫的文章

切片的基本用法

  • 切片即为序列的截取,切片基本写法为 [i:i+n:m]i为起始索引值,i+n为终止索引值,m为间隔,从索引i起,以m为间隔,截取到索引i+n前(不包括索引i+n的元素)的元素;
  • 在切片中,ii+nm,都可以省略,不写i时默认从序列最左边开始,不写i+n时默认为序列末尾,不写m时默认为1。三者都可以为负,当索引为-1即为序列倒数第一个元素,以此类推。m为负数时,将列表翻转,但翻转后的元素索引仍按照翻转前来使用,m不可以为0,会报错;
  • 切片为从左往右截取,若索引ii+n的元素不为从左往右,则截取不到元素。
# 表示整个列表 li[:] == li[::] == li[:9] == li[0:9] == li[-9:]
>>> li[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> li[2:8]
[3, 4, 5, 6, 7, 8]
>>> li[2:8:2]
[3, 5, 7]
>>> li[-1:]
[9]
>>> li[-8:-3]
[2, 3, 4, 5, 6]
>>> li[-8:-3:2]
[2, 4, 6]
>>> li[:-5]
[1, 2, 3, 4]
>>> li[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
# 当m间隔为-1时,可以理解为先将列表翻转(即为负号的作用),然后再按照翻转前的索引和间隔的绝对值去进行切片截取
>>> li[-2:-8:-1]  # 例如[-2:-8:-1],即为将列表翻转后,从第-2个元素(8),截取到第-8个元素(2)
[8, 7, 6, 5, 4, 3]
>>> li[2:5:-1]  # 若使用此写法,即为从索引为2的元素(3),间隔为1的截取到索引为5的元素(6),在翻转后的列表看来是从右往左,因此截取不到元素
[]
>>> li[:-5:-1]  # 列表翻转后,从最左端截取到索引为-5的元素
[9, 8, 7, 6]
>>> li[:-5:-3]  # 列表翻转后,间隔为3的从最左端截取到索引为-5的元素
[9, 6]

切片的高级用法

  • 切片是返回了一个新的序列;
  • 切片是浅拷贝,拷贝的是原序列中对象的引用,当拷贝出的原序列中的对象都为不可变对象时,对拷贝的序列进行赋值修改等,并不会影响原序列。但若拷贝出的原序列的对象中有可变对象,在拷贝出的序列操作此可变对象时,会影响原序列。
>>> li_1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> li_2 = li_1[:]
>>> li_1 == li_2
True
>>> li_1 is li_2  # li_2为返回的新序列,与li_1的id内存地址并不相同
False
>>> li_2[2] = 'a'
>>> li_2
[1, 2, 'a', 4, 5, 6, 7, 8, 9]
>>> li_1
[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> li_3 = [1, 2, 3, 4, 5, [9, 8, 7]]
>>> li_4 = li_3[:]
>>> li_4[5][1:] = ['a', 'b']  # 此处的 li_4[5]为拷贝出的 li_3[5]的引用,为同一个对象,因此修改后li_3也会对应变化
>>> li_4
[1, 2, 3, 4, 5, [9, 'a', 'b']]
>>> li_3
[1, 2, 3, 4, 5, [9, 'a', 'b']]

>>> li_4[5] = 3  # 若为此中方式,事实上修改的为 li_4中,索引为5的元素的引用,将索引为5的元素指向了3,因此li_3不会变化
>>> li_4
[1, 2, 3, 4, 5, 3]
>>> li_3
[1, 2, 3, 4, 5, [9, 'a', 'b']]

列表元素的增删查改

列表元素的增加

  • 使用append()方法,在列表末尾增加元素;
>>> l = [1, 2, 3, 4]
>>> l.append(5)
>>> l.append('hello')
>>> l
[1, 2, 3, 4, 5, 'hello']
  • 使用extend()方法,在列表后拼接另一个序列(列表、元组、字符串、字典(参数为字典时是拼接的key));
>>> l = [1, 2, 3, 4]
>>> l.extend([5, 6])
>>> l
[1, 2, 3, 4, 5, 6]
>>> l.extend('hello')
>>> l
[1, 2, 3, 4, 5, 6, 'h', 'e', 'l', 'l', 'o']
  • 使用+操作符拼接另一个列表(只能为列表);
>>> l = [1, 2, 3]
>>> l1 = ['a', 'b']
>>> l+l1
[1, 2, 3, 'a', 'b']
  • 使用*操作符重复列表。
>>> l = [8, 8, 6]
>>> l*3
[8, 8, 6, 8, 8, 6, 8, 8, 6]

列表元素的删除

  • 使用del list[]删除列表指定索引的元素;
>>> li = ['a', 'b', 'c', 'd', 'e', 'f']
>>> del li[1]
>>> li
['a', 'c', 'd', 'e', 'f']
  • 使用remove()方法删除列表指定值的元素(只删除值匹配的第一个元素);
>>> li.remove('e')
>>> li
['a', 'c', 'd', 'f']
  • 使用pop()方法取出并删除列表末尾的元素;
>>> li.pop()  # 会返回删除的那个元素
'f'
>>> li
['a', 'c', 'd']
  • 使用pop(m)方法取出并删除列表指定索引为m的元素;
>>> li.pop(1)
'c'
  • 使用clear()方法清空列表所有元素;
>>> li.clear()
>>> li
[]
  • 使用del list销毁列表。
>>> del li
>>> li
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'li' is not defined

列表中元素的查找和修改,是使用列表切片和索引来进行操作,不再赘述

参考文档
豌豆花下猫:
https://www.yuque.com/wandouhuaxiamao/pythoncat/pmz02u
https://www.yuque.com/wandouhuaxiamao/pythoncat/re6zv3#af541e61

这篇关于Python巩固基础02-基本数据类型之List列表类型详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!