在前一节的学习中,我们了解了变量的类型、定义不同数据类型及运算符。我们可以很容易地定义一个debt = 700,但是如果你现在是项目经理,需要对合并范围中各主体是否重要组成部分进行判断,合并范围内有100个主体,我们要如何定义及存储这100个变量呢?——总不能定义100个变量吧?——这时候就需要用到列表(list)。
我们以【多个同类型变量的存储】这个问题来介绍列表和循环。
由于代码全部是英文(虽然现在已经可以实现中文编程但我们不考虑此种情况,且以我所员工素质而言纯英文阅读应无难度),所以从此时开始后续所有章节中,对函数、关键字、重要提示或概念等,我们尽量全部使用英文,在必要时候采用中英文混合的方式说明。
一、列表
1、定义
Python官方对列表的说明:
Definition : list() Built-in mutable sequence——内置可变序列 If no argument is given, the constructor creates a new empty list. The argument must be an iterable if specified.
简单来说,我们可以把list看作一个容器(container),这个容器可以存储数据类型不一致的可变个数的元素。——再直观一点形容:list就是一个桶,这个桶里面可以随便放东西,比如字符串,比如浮点数,比如后面我们会介绍到的dataframe等等元素。
需要说明的是:Python的列表使用相对灵活,其包含的元素数据类型是可变的。但在比如Java等传统面向对象的编程语言中,具有list类似功能的Arraylist等,内部元素的数据类型必须保持一致——在某些情况下这会很方便灵活,但也可能会过于灵活。
2、举例
# 列表举例shenji_dept_01 = ["张三","李四","王五","赵六"]xinruzhi = ["小明", "小虎", "小红"]print(shenji_dept_01)print(xinruzhi)
3、列表的索引(index)
list是一种有序的集合,可以随时添加和删除其中的元素。也就是说列表是内部元素可变的(mutable)一个容器。
# 列表举例shenji_dept_01 = ["张三","李四","王五","赵六"]xinruzhi = ["小明", "小虎", "小红", "小龙", "大壮"]# 列表的索引print(shenji_dept_01[2])print(xinruzhi[0:2:1]) # 包含起始位置,不包含终止位置print(shenji_dept_01[2][1])
额外的练习素材:
L = [['Apple', 'Google', 'Microsoft'],['Java', 'Python', 'Ruby', 'PHP'],['Adam', 'Bart', 'Lisa']]#
4、列表的常用方法
(1)添加元素(append)
shenji_dept_01 = ["张一","李二","王三","赵四"]print("修改前的一部人员:")print(shenji_dept_01)print("发现了一个被遗忘的一部人员:")beiyiwangde = "周五"shenji_dept_01.append(beiyiwangde)print("修改后的一部人员:")print(shenji_dept_01)
(2)列表遍历(enumerate)
列表的长度(也就是list内元素的个数)是可变的,在很多情况下我们需要同时获取list的元素和每个元素的序号(当然并不只局限于list这一数据结构),Python内置了对应的函数enumerate,相关说明如下:
enumerate(iterable, start=0) Return an enumerate object. iterable must be a sequence, an iterator, or some other object which supports iteration. The next() method of the iterator returned by enumerate() returns a tuple containing a count (from start which defaults to 0) and the values obtained from iterating over iterable.
#%% 列表的遍历shenji_dept_01 = ["张一","李二","王三","赵四"]print(list(enumerate(shenji_dept_01)))# 列表遍历举例2for index, name in enumerate(shenji_dept_01):print('当前第%s个元素是:' % str(index))print(name)
(3)列表的拼接
shenji_dept_01 = ["张三","李四","王五","赵六"]xinruzhi = ["小明", "小虎", "小红", "小龙", "大壮"]xin_mingdan = shenji_dept_01 + xinruzhiprint(xin_mingdan)
(4)在指定位置index前插入元素
list01 = ["插", "入", "素"]char = "元"list01.insert(2, char)print(list01)
(5)删除元素
del:根据下标进行删除 pop:删除最后一个元素——后进后出法 remove:根据元素的值进行删除
lyrics = ['能','不','能','给','我','一','首','歌','的','时间']movienames = ['加勒比海盗','彗星来的那一夜','2001太空漫游','海上钢琴师','机械公敌','大鱼']print(movienames.pop())movienames.remove("加勒比海盗")print(movienames)del lyrics[0]print(lyrics)
(6)列表推导式 list comprehension
如果我们需要一次性生成100个净利润的数字分别是从1到100呢?
我们当然可以手敲,但是没必要,这里我们借助列表推导式list comprehension,列表推导式本身是语法糖syntactic sugar的一种,不会增加额外成本,但是对写代码更友好的一种结构。
tuidao = list(range(1,11))print(tuidao)
(7)反转reverse
reverse() 函数用于反转列表中元素。
ori_list = ["张一","李二","王三","赵四"]print(ori_list)ori_list.reverse()print(ori_list)
(8)操作符
| Python 表达式 | 结果 | 描述 |
|---|---|---|
| len([1, 2, 3]) | 3 | 长度 |
| [1, 2, 3] + [4, 5, 6] | [1, 2, 3, 4, 5, 6] | 组合 |
| [‘Hi!’] * 4 | [‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’] | 重复 |
| 3 in [1, 2, 3] | True | 元素是否存在于列表中 |
| for x in [1, 2, 3]: print x, | 1 2 3 | 迭代 |
