虽然起步有点晚,但是终于开始学习Python了,本系列文章作为我的学习笔记,主要是为了自己温故知新用,同时也与感兴趣的你们进行分享,本篇文章作为本笔记的第三篇,主要涉及列表的相关语法。

  21、列表
   (1)变量可以存储一个元素,而列表是一个“大容器"可以存储N多个元素,程序可以方便地对这些数据进行整体操作,列表相当于其它语言中的数组
   (2)列表的创建方式有两种,使用中括号或者调用内置函数list()都可以创建列表,例子如下:

lis1=['hello', 'world',20210203]
lis2=list(['hello', 'world',20210203])
print(lis1)
print(lis2)

运行结果如下:

['hello', 'world', 20210203]
['hello', 'world', 20210203]

22、列表的特点:

   ① 列表元素按顺序有序排序

   ② 索引映射唯一个数据,此外Python中除了可以用正索引还可以用负索引,如下所示:

lis1=['hello', 'world',20210203]
print(lis1[2])
print(lis1[-1])

 运行结果如下:

20210203
20210203

 分析过程如下图所示:

③ 列表可以存储重复数据
   ④ 任意数据类型混存
   ⑤ 根据需要动态分配和回收内存


  23、列表的查询操作

   可以通过内置函数index()来查询某个元素在列表中的索引,如查列表中存在N个相同元素,只返回相同元素中的第一个元素的索引,下面的第一个例子,只返回了0并没有返回3

   如果查询的元素在列表中不存在,则会抛出ValueError

   还可以在指定的start和stop之间进行查找,下面的第二个例子就是在索引值为1到4(不包括4)的范围内查找,几个例子如下所示:
lis1=['hello', 'world',20210203,'hello']
print(lis1.index('hello'))
print(lis1.index('hello',1,4))
print(lis1.index('hell'))

运行结果如下:

0
3
ValueError: 'hell' is not in list

24、获取列表中的多个元素

   ① 切片的结果是原列表片段的拷贝
   ② 切片的范围 [start,stop)
   ③ step默认为1,简写为[start,stop]
   ④ step为正数时,从start开始往后计算切片,对于[:stop:step],切片的第一个元素默认是列表的第一个元素,对于[start:step],切片的最后一个元素默认是列表的最后一个元素
   ⑤ step为负数时,从start开始往前计算切片,对于[:stop:step],切片的第一个元素默认是列表的最后一个元素,对于[start:step],切片的最后一个元素默认是列表的第一个元素
   ⑥ 注意均不包括stop的值,即[start,stop)

   几个例子如下所示:

lis1=[0,10,20,30,40,50,60,70,80,90,100]
print('步长为正数时')
print(lis1[1:10:2])
print(lis1[:10:2])
print(lis1[1::2])
print(lis1[3:10:2])
print('步长为负数时')
print(lis1[::-1])
print(lis1[10::-1])
print(lis1[:0:-1])

 运行结果如下:

步长为正数时
[10, 30, 50, 70, 90]
[0, 20, 40, 60, 80]
[10, 30, 50, 70, 90]
[30, 50, 70, 90]
步长为负数时
[100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 0]
[100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 0]
[100, 90, 80, 70, 60, 50, 40, 30, 20, 10]

 25、列表元素的判断及遍历

   ① 我们可以用in或not in 来判断某个元素是否存在于列表中

lis1 = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
print(10 in lis1)
print(110 in lis1)

 运行结果如下:

True
False

② 我们可以用for in循环输出列表中的内容

lis1 = [0, 'hello', 'happy', 30, 40, 'day']
for i in lis1:
    print(i)

运行结果如下:

0
hello
happy
30
40
day

 26、列表元素的增加操作

   (1) 使用append ()函数可以在列表的末尾添加一个元素
   (2) 使用extend()函数可以在列表的末尾至少添加一个元素
   (3) 使用insert()函数可以在列表的任意位置添加一个元素
   (4) 采用切片的方式可以在列表的任意位置添加至少一个元素

   几个例子如下所示:

lis1 = [0, 10, 20, 30]
print(lis1)
lis1.append(40)
print(lis1)
lis1.append([50, 60])
print('append函数将其作为一个整体添加到末尾:', lis1)
lis1.extend([50, 60])
print('extend函数将其中的每一个元素依次添加到末尾:', lis1)

lis2 = [11, 22, 33, 444]
print(lis2)
lis2.insert(1, 'hello')
print(lis2)

lis3=[666,888,999]
lis2[1:]=lis3
print(lis2)
lis2[1:2]=[1,2,3]
print(lis2)
lis2[1:1]=[0,0,0]
print(lis2)
lis1 = [0, 10, 20, 30]
print(lis1)
lis1.append(40)
print(lis1)
lis1.append([50, 60])
print('append函数将其作为一个整体添加到末尾:', lis1)
lis1.extend([50, 60])
print('extend函数将其中的每一个元素依次添加到末尾:', lis1)

lis2 = [11, 22, 33, 444]
print(lis2)
lis2.insert(1, 'hello')
print(lis2)

lis3=[666,888,999]
lis2[1:]=lis3
print(lis2)
lis2[1:2]=[1,2,3]
print(lis2)
lis2[1:1]=[0,0,0]
print(lis2)

 运行结果如下:

[0, 10, 20, 30]
[0, 10, 20, 30, 40]
append函数将其作为一个整体添加到末尾: [0, 10, 20, 30, 40, [50, 60]]
extend函数将其中的每一个元素依次添加到末尾: [0, 10, 20, 30, 40, [50, 60], 50, 60]
[11, 22, 33, 444]
[11, 'hello', 22, 33, 444]
[11, 666, 888, 999]
[11, 1, 2, 3, 888, 999]
[11, 0, 0, 0, 1, 2, 3, 888, 999]

           ①从上面的运行结果看出,在运用insert函数插入时,指定的一个元素是插入的位置,也就是索引值,是在该索引值代表的那个元素前面插入
   ②从上面的运行结果看出,在运用切片操作进行时,若不指定结束的元素,如lis2[1:]=lis3,则将从索引值为1的那个元素开始(包括该元素),将该元素及后面的元素均切掉,然后加上lis3中的内容。若指明开始和结束范围,如lis2[1:2]=[1,2,3],则只切掉索引值大于等于1而小于2的那个元素,并在该位置依次插入[1,2,3]中的元素,若起始的索引值和结束的相同,则在该索引值前插入至少一个元素,并不删除,如lis2[1:1]=[0,0,0]

  
  27、列表元素的删除操作

   (1)remove()函数:一次删除一个元素,重复元素只删除第一个,元素不存在抛出WalueError
   (2)pop()函数: 删除一个指定索引位置上的元素,指定索引不存在抛出IndexError,不指定索引,则移除列表中最后一个元素
   (3) 切片:一次致少删除一个元素
   (4) clear()函数: 清空列表
   (5) del:删除列表
   几个例子如下所示:

lis1=[10,20,30,40,50,60,70,50]
print(lis1)
lis1.remove(50)
print(lis1)
lis1.pop(1)
print(lis1)
lis1.pop()
print(lis1)
lis1[1:4]=[]
print(lis1)
lis1.clear()
print(lis1)
del lis1

 运行结果如下:

[10, 20, 30, 40, 50, 60, 70, 50]
[10, 20, 30, 40, 60, 70, 50]
[10, 30, 40, 60, 70, 50]
[10, 30, 40, 60, 70]
[10, 70]
[]

从上面的运行结果看出,在运用切片操作进行时,若插入的内容为空列表[],而且起始的索引值和结束的索引值不相同,则相当于执行了删除操作,删除了起始的索引值和结束的索引值之间的元素(包括起始的索引值对应的元素,但不包括结束的索引值对应的元素)

  28、列表元素的修改

   几个例子如下所示:

lis1=[10,20,30,40]
print(lis1)
lis1[1]=10
print(lis1)
lis1[2:4]=[10,10]
print(lis1)

运行结果如下:

[10, 20, 30, 40]
[10, 10, 30, 40]
[10, 10, 10, 10]

29、列表元素的排序操作

   列表元素的排序操作常见的两种方式:

   (1)调用sort()方法,列有中的所有元素默认按照从小到大的顺序进行排序,可以指定reverse=True,进行降序排序

lis1=[89,75,87,105,99,72]
print('原列表:',lis1)
lis1.sort()
print('从小到大排序:',lis1)
lis1.sort(reverse=True)
print('从大到小排序:',lis1)

运行结果如下:

原列表: [89, 75, 87, 105, 99, 72]
从小到大排序: [72, 75, 87, 89, 99, 105]
从大到小排序: [105, 99, 89, 87, 75, 72]

(2)调用内置函数sorted(),可以指定reverse=True,进行降序排序,原列表不发生改变

lis1=[89,75,87,105,99,72]
lis2=sorted(lis1)
lis3=sorted(lis1,reverse=True)
print('原列表:',lis1)
print('从小到大排序:',lis2)
print('从大到小排序:',lis3)

运行结果如下:

原列表: [89, 75, 87, 105, 99, 72]
从小到大排序: [72, 75, 87, 89, 99, 105]
从大到小排序: [105, 99, 89, 87, 75, 72]

(3)sort函数和sorted函数的区别:sort函数是对原有的列表进行排序,sorted函数是保持原有的列表不变,而将排序后的元素存放于一个新列表中(即,产生了一个新列表)


  30、列表生成式

   用法如下面的例子所示:

lis1=[i for i in range(1,10)]
lis2=[i*i+2 for i in range(1,10)]
print(lis1)
print(lis2)

运行结果如下:

[1, 2, 3, 4, 5, 6, 7, 8, 9]
[3, 6, 11, 18, 27, 38, 51, 66, 83]