三、列表
在《Python入门》相关课程中,我们学习Python的四大数据结构:列表、元组、字典和集合。其中,列表是最常用也最灵活的一种数据结构,我们对列表的概念和操作也有了基本的了解,今天,我们再来一起回顾一下这些最基本的基础知识,然后,我们再通过一个案例来看看列表在实际应用中到底如何运用?
(一)先复习一下
1、列表(list)的概念
Python的列表(list),是一种灵活的有序对象的集合。
1、列表可以包含任何种类的对象,甚至可以嵌套,一个列表中可以包含另一个列表作为其中一个对象。
2、列表包含的都是可变对象,支持实时修改(原处修改)。
3、列表可以根据需要增加,或减少。
4、借助列表,我们几乎可以通过脚本创造和处理任意复杂的数据信息。
列表极其重要,应用极为普遍。
2、如何创建一个列表
将用逗号分隔的对象置于一对方括号之中,就创建了一个列表。
>>> list1 = [1, 2, 3, 4, 5 ]
>>> list2 = ['a', 'b', 'c', 'd']
>>> list3 = [] #定义一个空列表
>>> list4 = [1,] #只有一个单项
PS:当一个列表赋值给一个变量名,本质上是在列表对象和变量名之间创建了一个引用。
3、访问列表中的值
(1)使用索引访问列表中的值
>>> list1 = ['a', 'b', 'c', 'd', 'e']
>>> list1[1]
'b'
(2)使用切片访问列表中的值
>>> list1 = ['a', 'b', 'c', 'd', 'e']
>>> print (list1[1:3])
>>> ['b', 'c',]
4、更新列表
(1)通过索引,直接为指定下标的项重新赋值。
(2)使用append()方法向列表的末尾追加新的项。
(3)使用del语句,通过索引删除指定下标的项。
>>> list1 = ['a', 'b', 'c', 'd', 'e']
>>> list1[3] = 'f'
>>> print(list1)
['a', 'b', 'c', 'f', 'e']
>>> list1.append('d')
>>> print(list1)
['a', 'b', 'c', 'f', 'e', 'd']
>>> del list1[2]
>>> print(list1)
['a', 'b', 'f', 'e', 'd']
5、列表的操作函数
>>> len(['a', 'b', 'c', 'd', 'e'])# 获取列表长度
5
>>> ['a', 'b', 'c', 'd', 'e'] + ['f', 'g', 'h']# 列表组合(相加)
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
>>> ['a', 'b', 'c'] * 2#列表重复
['a', 'b', 'c','a', 'b', 'c']
>>> 3 in [1,2,3] #in操作符,判断某元素是否存在
True
>>> for x in [1,2,3]#迭代(遍历)
1 2 3
>>> max([1,2,3,4,5])#获取列表的最大值
5
>>> min([1,2,3,4,5])#获取列表的最小值
1
>>> range(5)#创建一个连续整数的列表
[0,1,2,3,4]
PS:加号 + 两边必须都是列表,不可以把一个列表和一个字符串加在一起。
6、列表的操作方法
(1)、list.append(obj):在列表末尾添加新的对象。
(2)、list.count(obj):统计某个元素在列表中出现的次数。
(3)、list.index(obj):从列表中找出某个值第一个匹配项的索引位置。
(4)、list.insert(index, obj):将对象插入列表(指定索引位置的前面)。
(5)、list.pop(obj=list[-1]):移除列表中的一个元素(默认最后一个元素),并返回该元素的值。
(6)、list.remove(obj):移除列表中某个值的第一个匹配项。
(7)、list.reverse():对原列表进行反向排列。
(8)、list.sort([func]):对原列表进行排序。
(9)、list.extend(seq):在列表末尾追加另一个序列中的值。
请注意,当追加一个字符串序列时的情形:
>>> [1,2,3].extend(‘xyz’)
[1,2,3,’x’,’y’,’z’]
(二)、案例应用
如下表,是某公司员工考核表
员工ID | 工龄 | 薪级 | 出勤率 | 加班 | 业绩 |
---|---|---|---|---|---|
1001 | 3 | 5 | 100 | 16 | 50000 |
1002 | 1 | 1 | 80 | 0 | 3000 |
1003 | 2 | 3 | 90 | 10 | 23000 |
1004 | 4 | 6 | 95 | 20 | 45000 |
1005 | 5 | 7 | 100 | 30 | 65000 |
在考核业绩,核算奖金的过程中,需要分别根据不同考核单项的权重,来计算最终业绩的奖金,计算规则如下(假定它是合理的):
员工奖金 = 业绩 * [(工龄数 /30) * 0.2 + (薪级 /12) * 0.3 + (出勤率/100) * 0.3 + (加班数/120) * 0.2] /10
那么,如果是使用Python开发的这样一个薪酬管理系统,我们遇到这个问题时,我们的Python程序应该如何处理这个数据,最快的计算出每一个员工的奖金呢?
面对这样的需求,作为程序员我们应该有如下的思考:
1、作为一个应用系统,我们写的程序不是要计算这5个人这一个月的奖金,而是,根据规则,能够用于计算每个月每个人的奖金。
2、一个人的完整信息足以计算出这个人的奖金额度,且每个人的算法相同,那么,只需要按照数据库里(销售)员工的总人数循环迭代,即可计算出所有人的奖金。
3、每一个人的完整数据信息,就构成一个列表,且不同的索引值,代表了一个单项的数据,可用于计算这个人的奖金。
# 第一步:读取数据库的数据
# 创建一个空列表,用于存放员工数据
user_info_table = []
# 读取数据,并追加到列表
user_info_table.append([1001,3,5,100,16,50000])
user_info_table.append([1002,1,1,80,0,3000])
user_info_table.append([1003,2,3,90,10,23000])
user_info_table.append([1004,4,6,95,20,45000])
user_info_table.append([1005,5,7,100,30,65000])
# 第二步:一个新列表,它的元素将由员工ID和奖金构成的元组来构成。
user_reward_list = []
# 第三步:循环迭代员工数据表,并计算每一个员工的奖金。
# 使用for循环迭代,遍历所有员工数据
for x in user_info_table:
user_id = x[0]#获取员工ID
reward = x[5] * [(x[1] /30) * 0.2 + (x[2] /12) * 0.3 + (x[3]/100) * 0.3 + (x[4]/120) * 0.2] /10#计算奖金
user_reward = (user_id,reward)#创建一个元组
user_reward_list.appned(user_reward)#将元组添加到列表
# 显示员工的奖金
>>> for x in user_reward_list: print(x)
(1001, 2358.50)
(1002, 81.5)
(1003, 862.43)
(1004, 2226.15)
(1005, 3627.00)]
怎么样?
一个看似复杂的问题,
当我们善用列表的时候,
数据的处理,
就变得很简单了!