在前一节的学习中,我们了解了变量的类型、定义不同数据类型及运算符。我们可以很容易地定义一个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、举例

  1. # 列表举例
  2. shenji_dept_01 = ["张三","李四","王五","赵六"]
  3. xinruzhi = ["小明", "小虎", "小红"]
  4. print(shenji_dept_01)
  5. print(xinruzhi)

3、列表的索引(index)

list是一种有序的集合,可以随时添加和删除其中的元素。也就是说列表是内部元素可变的(mutable)一个容器。

  1. # 列表举例
  2. shenji_dept_01 = ["张三","李四","王五","赵六"]
  3. xinruzhi = ["小明", "小虎", "小红", "小龙", "大壮"]
  4. # 列表的索引
  5. print(shenji_dept_01[2])
  6. print(xinruzhi[0:2:1]) # 包含起始位置,不包含终止位置
  7. print(shenji_dept_01[2][1])

额外的练习素材:

  1. L = [['Apple', 'Google', 'Microsoft'],
  2. ['Java', 'Python', 'Ruby', 'PHP'],
  3. ['Adam', 'Bart', 'Lisa']
  4. ]
  5. #

4、列表的常用方法

(1)添加元素(append)

  1. shenji_dept_01 = ["张一","李二","王三","赵四"]
  2. print("修改前的一部人员:")
  3. print(shenji_dept_01)
  4. print("发现了一个被遗忘的一部人员:")
  5. beiyiwangde = "周五"
  6. shenji_dept_01.append(beiyiwangde)
  7. print("修改后的一部人员:")
  8. 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.

  1. #%% 列表的遍历
  2. shenji_dept_01 = ["张一","李二","王三","赵四"]
  3. print(list(enumerate(shenji_dept_01)))
  4. # 列表遍历举例2
  5. for index, name in enumerate(shenji_dept_01):
  6. print('当前第%s个元素是:' % str(index))
  7. print(name)

(3)列表的拼接

  1. shenji_dept_01 = ["张三","李四","王五","赵六"]
  2. xinruzhi = ["小明", "小虎", "小红", "小龙", "大壮"]
  3. xin_mingdan = shenji_dept_01 + xinruzhi
  4. print(xin_mingdan)

(4)在指定位置index前插入元素

  1. list01 = ["插", "入", "素"]
  2. char = "元"
  3. list01.insert(2, char)
  4. print(list01)

(5)删除元素

del:根据下标进行删除 pop:删除最后一个元素——后进后出法 remove:根据元素的值进行删除

  1. lyrics = ['能','不','能','给','我','一','首','歌','的','时间']
  2. movienames = ['加勒比海盗','彗星来的那一夜','2001太空漫游','海上钢琴师','机械公敌','大鱼']
  3. print(movienames.pop())
  4. movienames.remove("加勒比海盗")
  5. print(movienames)
  6. del lyrics[0]
  7. print(lyrics)

(6)列表推导式 list comprehension

如果我们需要一次性生成100个净利润的数字分别是从1到100呢?
我们当然可以手敲,但是没必要,这里我们借助列表推导式list comprehension,列表推导式本身是语法糖syntactic sugar的一种,不会增加额外成本,但是对写代码更友好的一种结构。

  1. tuidao = list(range(1,11))
  2. print(tuidao)

(7)反转reverse

reverse() 函数用于反转列表中元素。

  1. ori_list = ["张一","李二","王三","赵四"]
  2. print(ori_list)
  3. ori_list.reverse()
  4. 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 迭代