我的Python入门笔记(7)

四章、列表


Sparse is better than dense.——The Zen of Python


 一、列表概述

  列表(List)是Python中的一种数据结构,内置的可变序列。在形式上,列表的所有元素都放在一对中括号“[ ]”中,两个相邻的元素使用逗号“,”进行分割,在内容上,可以将整数、字符串、列表、元组、等任何类型的内容放入列表中,并且同一个列表中,元素的类型可以不同。

二、 列表的创建和删除

  在Python中有多种创建列表的方法:

  1.使用赋值运算符直接创建列表

  在创建列表时,可以直接使用赋值运算符“=”直接将一个列表赋值给一个变量,语法格式如下:

  listname = [ element1,element2,element3,···,element n]

    listname: 列表的名称

    element1 :列表中的元素

1 num = [220,284,1210,1184,26]
2 strlist=['雨霓同学','年龄','性别',['编号,组成']]
3 strlist2 = ['150000001','']
4 print(num,strlist,strlist2)

  在使用列表时,虽然可以将不同类型的数据放入到同一列表中,但是通常情况下,并不会这样做,而是在一个列表中只放入一种类型的数据,这样可以提高程序的可读性。

  2.创建空列表

  在Python中,眱创建空列表,例如创建一个名为ceshilist的空列表,则可以使用如下代码:ceshilist = [].

  3. 创建数值列表

  在Python中,可以使用list()函数直接将range()函数循环出来的结果转换为列表。list()函数的基本语法如下:

  list(data)    其中data表示可以转换为列表的数据,其类型可以是range对象、字符串、元组或者其他可迭代的类型数据。

list1=list(range(0,10,2))
print(list1)
输出:
[0, 2, 4, 6, 8]

   4.删除列表

  对于已经创建的列表,不在使用时,可以使用del语句将其删除。语法格式为:del listname   listname为要删除列表的名称。一般这玩意不太用。在Python自带的垃圾回收机制会自动销毁不用的列表,所以即使我们不手动将其删除,Python也会将其自动回收。但是列表要是不存在,在进行删除操作时,则会报错。

三、访问列表元素

  在Python中,可以直接使用print()函数将列表内容进行输出

1 list1=['雨霓同学',220,284,"亲和数对:1210&1184",['人生苦短,我用python']]
2 print(list1)
3 输出:
4 ['雨霓同学', 220, 284, '亲和数对:1210&1184', ['人生苦短,我用python']]

  从上述实例可以看出,在输出列表时,是包括左右两侧的中括号的。如果不想要输出全部元素,也可以通过列表的索引获取指定的元素。这与之前的访问序列的方法是一样的。

  3.1 遍历列表

  遍历列表中的所有元素是常用的一种操作,在遍历的过程中可以完成查询、处理等功能,Python中遍历列表的方法有多种。可以使用如下的方法进行列表的遍历。

  1.直接使用for循环实现  

  使用for循环遍历列表,只能输出元素的值,其语法格式如下:

  for item in listname 

    item: 用于保存获取到的元素值,要输出元素内容时,直接输出该变量即可

    listname: 列表名称

  示例如下:

1 list1=['雨霓同学',220,284,"亲和数对:1210&1184",['人生苦短,我用python']]
2 for item in list1:
3     print(item)
4 输出:
5 雨霓同学
6 220
7 284
8 亲和数对:1210&1184
9 ['人生苦短,我用python']

  2.使用for循环和enumerate()函数实现

  使用for循环和enumerate()函数可以实现同时输出索引值和元素的功能,其语法格式如下:

  for index,item in enumerate(listname)

    index:用于保存元素的索引

    item: 用于保存获取到的元素值,要输出元素内容时,直接输出该变量即可。

    listname: 列表的名称

  示例如下:

1 list1=['雨霓同学',220,284,"亲和数对:1210&1184",['人生苦短,我用python']]
2 for index,item in enumerate(list1):
3     print(index+1,item)
4 输出:
5 1 雨霓同学
6 2 220
7 3 284
8 4 亲和数对:1210&1184
9 5 ['人生苦短,我用python']

  3.2 添加、修改和删除列表元素

  添加、修改和删除列表元素也称为更新列表。在实际开发时,经常需要对列表进行更新。

  1.添加元素

  在前面介绍过,通过“+”可以将两个序列连接,通过该方法也可以实现列表元素的添加。但是这种方法的执行速度要比直接使用列表对象的append()方法慢,所以一般使用append()方法在列表的末尾追加元素,其语法格式如下:

  listname.append(obj)

  listname: 要添加元素的列表名称

  obj : 要添加到列表末尾的对象

  示例如下:  

list1=['雨霓同学',220,284,"亲和数对:1210&1184",['人生苦短,我用python']]
list1.append("你猜猜这是啥")
print(list1)
输出:
['雨霓同学', 220, 284, '亲和数对:1210&1184', ['人生苦短,我用python'], '你猜猜这是啥']

  列表对象除了提供append()方法向列表中添加元素,还提供了insert()方法向列表中添加元素。该方法用于向列表的指定位置插入元素。但是该方法的执行效率没有append()方法高一般不建议使用,其语法格式如下:

  listname.insert(index, obj)   #其中index:为要插入位置的索引

  此外,如果想要将一个列表中的全部元素添加到另一个列表中,可以使用列表对象的extend()方法,其语法格式如下:

  listname.extend(seq)

  listname:原列表,seq:要添加的列表。语句执行后,seq的内容将添加到listname的后面

  有没有一种方法,将一个列表添加到另一个列表的任意位置。

  2.修改元素

  修改列表中的元素,只需要通过索引获得该元素,然后再为其重新赋值即可,示例如下:

1 list1=['雨霓同学',220,284,"亲和数对:1210&1184",['人生苦短,我用python']]
2 list1[2]=1210
3 print(list1)
4 输出:
5 ['雨霓同学', 220, 1210, '亲和数对:1210&1184', ['人生苦短,我用python']]

  3.删除元素

  删除元素主要有两种情况,一种是根据索引删除,一种是根据元素值删除。

  根据索引删除:删除列表中的指定元素和删除列表类似,也可以使用del语句实现,所不同的是在指定列表名称时,换为列表元素。示例如下:

1 list1=['雨霓同学',220,284,"亲和数对:1210&1184",['人生苦短,我用python']]
2 del list1[-1]  #删除最后一个元素
3 print(list1)
4 输出:
5 ['雨霓同学', 220, 284, '亲和数对:1210&1184']

  使用pop()方法删除:pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值,语法格式如下:

  list.pop([index=-1])
1 list1=[220,284,1210,1184,26,22,45]
2 list2=list1.pop(1)
3 print("删除的项为:",list2)
4 print("现在的列表为:",list1)
5 输出:
6 删除的项为: 284
7 现在的列表为: [220, 1210, 1184, 26, 22, 45]

  根据元素值删除:想要删除一个不确定其位置的元素(根据元素值进行删除),可以使用列表对象的remove()方法实现,示例如下: 

1 list1=['雨霓同学',220,284,"亲和数对:1210&1184",['人生苦短,我用python']]
2 list1.remove(284)  #删除最后一个元素
3 print(list1)
4 输出:
5 ['雨霓同学', 220, '亲和数对:1210&1184', ['人生苦短,我用python']]

   但是在使用remove()方法删除元素前,应该先判断元素是否存在,然后再进行删除,如果指定元素不存在,则会提示报错。

  4.对列表元素进行统计计算

  在Python列表中,提供了一些内置函数实现统计、计算等方面的功能。

  4.1 获取指定元素出现的次数

  使用列表对象的count()方法可以获取指定元素在列表中出现的次数,其基本语法格式如下:

  listname.count(obj)

  listname:表示列表的名称

  obj:表示要判断是否存在的对象,这里只能进行精确匹配,即不能是元素值的一部分。

  示例如下:

1 list1=['雨霓同学',220,284,220,284,"亲和数对:1210&1184",['人生苦短,我用python']]
2 num=list1.count(220)
3 print(num)
4 输出:
5 2

   4.2获取指定元素首次出现的索引

  使用列表对象的index()方法可以获取指定元素在列表中首次出现的位置(索引),基本语法格式:

  listname.index(obj)

  listname:列表的名称

  obj:表示要查找的对象,只能进行精确匹配,如果指定对象不存在则会抛出异常。

  示例如下:

1 list1=['雨霓同学',220,284,220,284,"亲和数对:1210&1184",['人生苦短,我用python']]
2 num=list1.index(220)
3 print(num)
4 输出:
5 1

   4.3统计数值列表的元素和

  在Python中,提供了sum()函数用于统计数值列表中各种元素的和,其语法格式如下:

  sum(iterable [,start ])

  interable:表示要统计的列表

  start:表示统计结果是从哪个数开始(即将统计结果加上start所指定的数),可选参数,如果没有指定,默认值为0.

  示例如下:

1 list1=[220,284,1210,1184,26,22,45]
2 total=sum(list1)
3 print(total)
4 输出:
5 2991

  5.对列表进行排序

  在Python中提供了两种常用的方法对列表进行排序:使用列表对象的sort()方法和使用内置的sorted()函数。

  1.使用列表对象的sort()方法实现

  列表对象提供了sort()方法用于对原列表中的元素进行排序。排序后原列表中的元素数学将发生改变,其语法格式如下:

  listname.sort(key=none,reverse=False)

  listname:表示要进行排序的列表

  key:表示指定一个从每个列表元素中提取一个用于比较的键(例如:设置“key=str.lower”表示在排序时不区分大小写。)

  reverse:可选参数,如果将其指定为True,则表示降序排序,如果为False,则表示升序排序,默认为升序排序。

  示例如下:

 1 list1=[220,284,1210,1184,26,22,45]
 2 print("初始列表:",list1)   #默认列表
 3 list1.sort()
 4 print("升序列表:",list1)   #升序列表
 5 list1.sort(reverse=True)
 6 print("降序列表",list1)   #降序列表
 7 输出:
 8 初始列表: [220, 284, 1210, 1184, 26, 22, 45]
 9 升序列表: [22, 26, 45, 220, 284, 1184, 1210]
10 降序列表 [1210, 1184, 284, 220, 45, 26, 22]

  此外在使用sort()方法对字符串列表进行排序,采用的规则是先对大写字母排序,然后在对小写字母排序。如果想要对字符串列表排序(不区分大小写),则需要指定Key参数。

  示例如下:

1 listname=["pet",'Brother','Tom','Age','years','Bat']
2 listname.sort()
3 print('区分大小写:',listname)
4 listname.sort(key=str.lower)
5 print('不区分大小写:',listname)
6 输出:
7 区分大小写: ['Age', 'Bat', 'Brother', 'Tom', 'pet', 'years']
8 不区分大小写: ['Age', 'Bat', 'Brother', 'pet', 'Tom', 'years']

  采用sort()方法对列表进行排序的时候,对中文支持很不友好,排序结果与常用的音序和笔画排序都不一样,如果需要实现对中文的排序,需要重新编写想要的方法进行处理,不能直接使用sort()方法。

  2.使用内置的sorted()函数实现

  在Python中,提供了一个内置的sorted()函数,用于对列表进行排序。使用该函数排序后,原列表的元素顺序不变,其语法格式如下:

  sorted(interable,key=none,reverse=False)

  inerable: 表示要进行排序的列表名称。

  key:表示指定一个从每个列表中提取一个用于比较的键,

  revese:可选参数,如果将其指定为True,则表示降序排列;如果为False表示升序排列。默认为升序排列。

  示例如下: 

 1 list1=[220,284,1210,1184,26,22,45]
 2 list2=sorted(list1)
 3 print("升序:",list2)
 4 list3=sorted(list1,reverse=True)
 5 print('降序:',list3)
 6 print('原序列',list1)
 7 输出:
 8 升序: [22, 26, 45, 220, 284, 1184, 1210]
 9 降序: [1210, 1184, 284, 220, 45, 26, 22]
10 原序列 [220, 284, 1210, 1184, 26, 22, 45]

  列表对象的sort()方法,在排序时会改变原列表的元素排列顺序,而使用sorted()函数时,会建立一个原列表的副本,改副本为排序后的列表。

  6. 列表推导式

  使用列表推导式可以快速生成一个列表,或者根据某个列表生成满足指定需求的列表,其常用语法格式如下:

  1. 生成指定范围的数值列表

  list = [expression for vat in range]

  list: 表示要生成的列表名称

  exprsessiom: 表达式,用于计算新列表的元素

  var:循环变量

  range: 采用range()函数生成的range对象

  示例如下: 

1  # 生成一个包括10个随机数的列表,范围在10~100之间
2 import random  # 导入random(随机数)
3 random_numbers=[random.randint(10,100) for i in range(10)]
4 print("生成的随机数:",random_numbers)
5 输出:
6 生成的随机数: [60, 44, 72, 89, 81, 64, 75, 70, 77, 37]

  2.根据列表生成指定需求的列表

  newlist = [expressiom for var in list]

  newlist: 表示新生成的列表名称

  expression:表达式泳衣计算新列表元素

  var: 变量,值为后面列表的每个元素值

  list: 用于生成新列表的原列表

  示例如下:

1 price=[220,284,1210,1184,26]
2 sale =[int(x*0.5) for x in price]
3 print("原始价格:",price)
4 print("打五折价格:",sale)
5 输出:
6 原始价格: [220, 284, 1210, 1184, 26]
7 打五折价格: [110, 142, 605, 592, 13]

  3.从列表中选择符合条件的元素组成新的列表

  newlist=[Expression for var in list if condition]

  newlist:新生成列表的名称

  Expression: 表达式,用于计算新列表的元素

  var: 变量,值为后面列表的每个元素值。

  list: 用于生成新列表的原始列表

  condition: 条件表达式,用于指定筛选条件。

1 price=[220,284,1210,1184,26]
2 sale =[x for x in price if x > 256]
3 print("原始价格:",price)
4 print("价格高于256的:",sale)
5 输出:
6 原始价格: [220, 284, 1210, 1184, 26]
7 价格高于256的: [284, 1210, 1184]
posted @ 2019-06-21 10:10  雨霓同学  阅读(378)  评论(0编辑  收藏  举报