Python---列表(基本操作、内置函数、切片等)(细讲)

一、

Python 为列表类型提供了一系列内置操作,包括append()insert()pop()remove()等函数,能够很方便的处理上述列表元素变化的情况。我们以上述客人名单列表为例介绍这几种列表操作方法。

添加列表元素

Python 提供了append()insert()等函数,实现向一个列表增加新元素的功能。

(1)在列表尾部添加元素 在 Python 中,可以使用append()方法向一个列表的尾部追加一个元素,其基本语法如下:


  1. source_list.append(obj)

其中:

  • source_list:待修改的列表;

  • obj:待插入的元素。

例如,要向guests列表尾部增加客人Hu qi,相应的语句为:


  1. # 初始化guests列表
  2. guests=['Zhang san','Li si','Wang wu','Zhao liu']
  3. # 向guests列表尾部追加一个名为Hu qi的客人
  4. guests.append('Hu qi')
  5. # 输出新的guests列表
  6. print(guests)

输出结果为:


  1. ['Zhang san','Li si','Wang wu','Zhao liu','Hu qi']

(2)在列表指定位置添加元素

Python 也提供了insert()方法,可以在列表任意指定位置插入元素,其基本语法为:


  1. source_list.insert(index,obj)

其中:

  • source_list:待修改的列表;

  • index:待插入的位置索引;

  • obj:待插入的元素。

注意:在 Python 中,列表起始元素的位置索引为0。

例如,要向guests列表中Zhang san的后面增加客人Hu qi,则相应的语句为:


  1. # 创建并初始化guests列表
  2. guests=['Zhang san','Li si','Wang wu','Zhao liu']
  3. # 向guests列表Zhang san后面增加一个名为Hu qi的客人
  4. guests.insert(1,'Hu qi')
  5. # 输出新的guests列表
  6. print(guests)

输出结果为:


  1. ['Zhang san','Hu qi','Li si','Wang wu','Zhao liu']

修改列表元素

Python 中修改列表元素的方法为:直接将列表中要修改的元素索引指出,然后为其指定新值。其基本语法如下:


  1. source_list[index] = obj

其中:

  • source_list:待修改的列表;

  • index:待修改元素的位置索引;

  • obj:待元素的新值。

例如,将请客名单guests列表中的Wang wu改为Wang shi,则相应的语句为:


  1. # 初始化guests列表
  2. guests=['Zhang san','Li si','Wang wu','Zhao liu']
  3. # 将列表中的`Wang wu`改为`Wang shi`
  4. guests[2] = 'Wang shi'
  5. # 输出新的guests列表
  6. print(guests)

输出结果为:


  1. ['Zhang san','Li si','Wang shi','Zhao liu']

删除列表元素

Python 提供了多种不同的方法来实现对列表中元素的删除操作,包括根据元素索引位置或者元素值删除元素的方法。

(1)删除指定位置的元素

del方法

在 Python 中,调用del函数能够删除指定索引位置的元素,其基本语法如下:


  1. del source_list[index]

其中:

  • source_list:待修改的列表;

  • index:待删除元素的位置索引。

例如,将请客名单guests列表中的Zhang san删除,则相应的语句为:


  1. # 初始化guests列表
  2. guests=['Zhang san','Li si','Wang wu','Zhao liu']
  3. # 将列表中的`Zhang san`删除
  4. del guests[0]
  5. # 输出新的guests列表
  6. print(guests)

输出结果为:


  1. ['Li si','Wang wu','Zhao liu']

pop方法

Python 还提供了pop()方法来删除元素,该方法将从源列表删除对应元素,同时返回被删除的元素。其基本语法如下:


  1. deleted_obj = source_list.pop(index)

其中:

  • deleted_obj:保存被删除元素的变量,可根据需要*命名;

  • source_list:待修改的列表;

  • index:待删除元素的位置索引。

注意:index参数为可选项,不填则默认删除列表末尾的元素。

例如,将请客名单guests列表中的Zhang san删除,则相应的语句为:


  1. # 初始化guests列表
  2. guests=['Zhang san','Li si','Wang wu','Zhao liu']
  3. # 将列表中的`Zhang san`删除
  4. deleted_obj = guests.pop(0)
  5. # 输出被删除的元素以及删除后的guests列表
  6. print(deleted_obj)
  7. print(guests)

输出结果为:


  1. Zhang san
  2. ['Li si','Wang wu','Zhao liu']

(2)删除指定值对应的元素

有些时候我们并不知道要删除元素的位置索引,怎么办呢?别着急,Python 还提供了remove()方法,可以直接通过元素值来删除对应的元素。其基本语法如下:


  1. source_list.remove(obj)

其中:

  • source_list:待修改的列表;

  • obj:待删除元素的值。

注意:如果列表中有多个值为obj的元素,remove仅删除位置索引最靠前的那个元素。

例如,将请客名单guests列表中的Zhang san删除,则相应的语句为:


  1. # 初始化guests列表,列表中有多个名为Zhang san的客人
  2. guests=['Zhang san','Li si','Wang wu','Zhao liu','Zhang san']
  3. # 将列表中的`Zhang san`删除
  4. guests.remove('Zhang san')
  5. # 输出新的guests列表
  6. print(guests)

输出结果为:


  1. ['Li si','Wang wu','Zhao liu','Zhang san']

二、

Python 针对列表数据结构内置提供了sort()方法,实现对列表元素的排序功能。其基本语法如下:


  1. source_list.sort(reverse=True)

其中:

  • source_list:待排序的列表;

  • sort:列表排序函数的语法关键词;

  • reversesort函数的可选参数。如果设置其值为True,则进行反向从大到小排序,如果设置为False或者不填写该参数,则默认进行正向从小到大排序。

例如,给定一个客人列表guests,我们对其按照字母排序如下:


  1. guests = ['zhang san','li si','wang wu','sun qi','qian ba']
  2. guests.sort()
  3. print(guests)
  4. guests.sort(reverse=True)
  5. print(guests)

程序输出结果:


  1. ['li si','qian ba','sun qi','wang wu','zhang san']
  2. ['zhang san','wang wu','sun qi','qian ba','li si']

注意:sort函数会直接作用于待排序的列表并修改其排序。

三、

range()函数

Python 提供了range()函数,能够用来生成一系列连续增加的数字。其基本使用语法有如下三种:


  1. range(lower_limit,upper_limit,step)

其中:

  • lower_limit: 生成系列整数的下限整数,不填该参数则默认为从0开始,生成的整数从此数开始,包括该数;

  • upper_limit:生成系列整数的上限整数,必填参数,生成的整数要小于该上限;

  • step:在下限和上限之间生成系列整数之间的间隔步长,不填该参数则默认步长为1

注意:range()函数的三个参数都只能为整数。如果range()函数中仅一个参数,则该参数表示upper_limit,如果仅两个参数,则分别表示lower_limitupper_limit

例如,要生成1~6之间步长为2的系列整数:


  1. for i in range(1,6,2):
  2. print(i)

输出结果:


  1. 1
  2. 3
  3. 5

基于range()函数创建数字列表

我们可以通过range()函数,利用 Python 列表提供的append()插入功能创建一个列表。例如,我们要创建一个包含10个0~9整数的平方的列表:


  1. # 声明一个列表变量
  2. numbers = []
  3. # 利用append()函数和range()函数向列表插入目标元素
  4. for i in range(10):
  5. number = i**2
  6. numbers.append(number)
  7. print(numbers)

输出结果:


  1. [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

使用list()函数和range()函数创建数字列表

我们可以利用list()函数将range()生成的系列数字直接转为列表,这时range()函数的返回值将会作为list()函数的参数,输出为一个数字列表。其基本使用语法如下:


  1. data_list = list(range(lower_limit,upper_limit,step))

其中:

  • list:列表函数的语法关键词;

  • range:函数语法关键词;

  • data_list:最终生成的列表变量。

例如,我们要生成并输出1~5的数字列表:


  1. data_list = list(range(1,6))
  2. print(data_list)

输出结果:


  1. [1,2,3,4,5]

对数字列表进行简单的统计运算

Python 中有一些专门处理数字列表简单的统计运算的函数,利用这些函数可以轻松找到数字列表的最小值、最大值及进行总和等一系列统计运算。其基本语法如下:


  1. min_value = min(data_list)
  2. max_value = max(data_list)
  3. sum_value = sum(data_list)

其中:

  • min:数字列表求最小值的语法关键字;

  • max:数字列表求最大值的语法关键字;

  • sum:数字列表求和的语法关键字。

具体使用示例如下:


  1. numbers = [2,4,11,1,21,32,5,8]
  2. print('The min number is',min(numbers))
  3. print('The max number is',max(numbers))
  4. print('The sum is',sum(numbers))

输出结果:


  1. The min number is 1
  2. The max number is 32
  3. The sum is 84

四、

Python 切片是对一个列表取其部分元素获得一个子序列的常见操作,切片操作的返回结果类型与被切片的对象一致。要创建一个已有列表的切片,通过指定切片的第一个列表元素和最后一个列表元素的索引号即可。其基本语法如下:


  1. list_slice = source_list[start:end:step]

其中:

  • source_list:被切片的源列表;

  • list_slice:切片后生成的子序列列表;

  • start:切片起始索引位置,省略则从头开始;

  • end:切片结束索引位置,省略则切至列表末尾;

  • step:切片步长,可选参数,表示每N个元素取一个,默认为1

注意:切片和range()函数一样,Python 会自动到达所指定切片结束索引位置的前面一个元素停止。

例如,下面是我已经点好的菜名列表,现在朋友点的菜单中包含我的前三个菜名,输出朋友的菜单:


  1. my_menu = ['fish','pork','pizza','carrot']
  2. print(my_menu[1:4:2])
  3. print(my_menu[:3])
  4. print(my_menu[2:])

输出结果:


  1. ['pork','carrot']
  2. ['fish','pork','pizza']
  3. ['pizza','carrot']

负数索引返回的是离列表末尾相应间隔的元素,列表末尾元素的索引是从-1开始的。例如,朋友的菜单是包含我的菜单最后3个菜名:


  1. my_menu=['fish','pork','pizza','carrot']
  2. print(my_menu[-3:])

输出结果:


  1. ['pork','pizza','carrot']

如果您想了解更多有关列表操作的相关知识,请参考:【美】 Eric Matthes 著《 Python 编程——从入门到实践》第四章。

编程要求

本关的编程任务是补全src/Step4/foods.py文件的代码内容,实现如下功能:

  • 利用切片方法从my_menu列表中每3个元素取1个,组成子序列并打印输出;

  • 利用切片方法获取my_menu列表的最后三个元素组成子序列并打印输出。

本关涉及的代码文件src/Step4/foods.py的代码框架如下:


  1. # coding=utf-8
  2. # 创建并初始化my_munu列表
  3. my_menu = []
  4. while True:
  5. try:
  6. food = input()
  7. my_menu.append(food)
  8. except:
  9. break
  10. # 请在此添加代码,对my_menu列表进行切片操作
  11. ########## Begin ##########
  12. ########## End ##########
上一篇:如何将在scikit图像find_contours中创建的轮廓导出到shapefile或geojson?


下一篇:Apple Logic Pro 10.7 TNT (Logic Pro 10.7 + MainStage 3.5 (Universal))