万门69节入门python_Python入门四:列表

1. 列表初阶

1) 列表

列表是一种有序的集合,可以随时为其添加和删除元素。

列表中的元素可以是任意类型的,如字符串、整数、浮点数等。

eg: 创建学生花名册时,若有多少个学生就定义多少个变量会十分麻烦,因此可以创建列表将名册存入其中:

students = [

'晗晗',

'琴琴',

'璇璇'

]

上面由一对中括号包裹,每个姓名用逗号隔开的就是列表。

2) 列表和列表元素

定义列表时,要用中括号把所有数据框起来,其中每个数据叫元素,每个元素之间要用英文逗号隔开。

[]: 只有一对中括号,里面没有元素的就是空列表。元素的获取:

索引——每个元素的位置编号(从0开始)

如上例中['晗晗', '琴琴', '璇璇']三个元素索引分别为0,1,2。可通过索引来读取所需的元素,如print(students[1]),则输出:琴琴。

3) 列表元素的删除

del 列表名[元素的索引]

# del是delete的简写

eg: del students[1]

此时列表中仅剩2个元素,若继续使用students[2]来读取第3个元素,列表索引则会超出范围,程序会报错——IndexError: list index out of range.

4) 列表元素的添加

append()方法可实现元素添加,如:students.append('梦梦')。

append()方法会在列表末尾新增一个元素,同时列表长度加1,若要打印出梦梦的名字,可以通过:print(students[2])。

Exercise: 当晗晗在的时候,自动添加梦梦,然后输出花名册

students = [

'晗晗',

'琴琴',

'璇璇'

]

if '晗晗' in students:

students.append('梦梦')

print(students)

2. 列表进阶

1) 列表元素的插入

insert()方法可以实现在列表中任意位置插入元素。

append()和insert()的区别:

students = ['晗晗', '琴琴']

students.append('璇璇')

print(students)

# 输出:['晗晗', '琴琴', '璇璇']

students.insert(1, '文文')

print(students)

# 输出:['晗晗', '文文', '琴琴', '璇璇']append()方法只接收一个参数,即要添加的元素,直接将该元素添加到列表末尾。

insert()方法接收两个参数,第一个参数为插入位置,第二个参数为插入的元素,它会将元素插入到对应的位置。

列表中元素的修改:

通过索引找到需更改的元素,然后用赋值的方法改变其值。如上例中,将'文文'改为'梦梦':

students[1] = '梦梦'

2) 反向索引正向索引方式:从0开始,到列表长度减1的索引值结束,从左到右递增。

反向索引方式:从-1开始,索引值从右到左递减。

如打印长度为4的列表students中第二个元素的值:

print(students[1])

# 正向索引

print(students[-3])

# 反向索引

Note: 获取列表末尾的元素用反向索引更简单,比如正向索引获取最后一个元素是students[len(students) – 1],反向索引则用students[-1]即可完成。

Eg: 计算12名学生成绩的极差(分数由高到低排列)

scores = [99, 92, 87, 85, 81, 80, 79, 76, 75, 73, 71, 67]

def calc_range(scores):

return scores[0] – scores[-1]

result = calc_range(scores)

print(result)

3) 列表常用方法

以列表students为例:添加:students.append('名字')

插入:students.insert(0, '名字')

索引:students.index('名字')

移除元素:students.pop(1)

移除元素:students.remove('名字')

统计元素出现的次数:students.count('名字')

排序:students.sort()

反转:students.reverse()

复制:students.copy()

清空:students.clear()

①索引

students = ['晗晗', '琴琴', '璇璇']

print(students.index('晗晗')) # 输出:0

print(students.index('文文')) # 报错:ValueError

②移除元素

除del语句外,还可使用pop()和remove()方法删除列表元素。如上例中students列表,可采取三种方式移除‘晗晗’:

del students[0]

students.pop(0)

students.remove('晗晗')

note: remove()方法只删除从左到右第一个内容一样的元素,若删除多个则需多次调用。

如果索引超出范围或元素不在列表中,上述方法都会报错。

③统计元素出现的次数

students = ['晗晗', '琴琴', '晗晗', '璇璇']

print(students.count('晗晗'))

# 输出:2

④排序

sort()可使用默认排序方法对数组进行排序。字符串列表按元素首字母排序:

str_list = ['liu', 'jia', 'yang']

str_list.sort()

print(str_list)

# 输出:['jia', 'liu', 'yang']数值列表按数值从小到大顺序排序。

num_list = [4, 2, 1, 9]

num_list.sort()

print(num_list)

# 输出:[1, 2, 4, 9]

⑤反转,复制,清空

students = ['晗晗', '琴琴', '璇璇']

students.reverse()

print(students)

# 输出:['璇璇', '琴琴', '晗晗']

students1 = ['晗晗', '琴琴', '璇璇']

students2 = students1.copy()

print(students2)

# 输出:['晗晗', '琴琴', '璇璇']

students = ['晗晗', '琴琴', '璇璇']

students.clear()

print(students)

# 输出:[]

Note: copy()方法可解决修改students1中元素影响students2的问题,若直接使用students2 = students1则会造成两个列表修改元素时互相干扰。

Eg: 计算学生成绩的极差(乱序排列)

scores = [89, 92, 77, 85, 81, 90, 89, 86, 79, 93, 91, 96]

def calc_range(scores):

scores.sort()

return scores[-1] – scores[0]

result = calc_range(scores)

print(result)

4) 元组

被圆括号包裹,内部的元素不可更改。

元组具有列表的大多数特性,但如果修改了元组中的元素,运行时将会报错TypeError。

常见的元组运算(以元组students为例):元素是否存在于元组:'元素' in students

索引:students.index('元素')

统计元素出现的次数:students.count('元素')

weekdays = ('周一', '周二', '周三', '周四', '周五')

print(weekdays) # 输出:('周一', '周二', '周三', '周四', '周五')

print(len(weekdays)) # 输出:5

print('周五' in weekdays) # 输出:True

print(weekdays[-3]) # 输出:周三

print(weekdays[1]) # 输出:周二

print(weekdays.index('周二')) # 输出:1

print(weekdays.count('周一')) # 输出:1

3. 批量处理

1) 列表基本运算

①列表的加法

weekdays = ['周一', '周二', '周三'] + ['周四', '周五']

print(weekdays)

# 输出:['周一', '周二', '周三', '周四', '周五']

Note: 列表和元组的加法只能在同种类型之间相加,否则运行时会报错TypeError。如果一定要将其相加,要先使用list()函数将元组转换为列表。

weekdays = ['周一', '周二', '周三'] + list(('周四', '周五'))

print(weekdays)

# 输出:['周一', '周二', '周三', '周四', '周五']

列表和元组相加后,后一个列表和元组中的元素会被逐个添加到前一个列表或元组中,相当于调用了多次append()。但append()一次只能添加一个元素到列表末尾,不能将多个元素同时传入其中。

②列表的乘法

作用:将列表或元组里的元素重复n遍,即将n个同样的列表或元组相加。

food = ['火锅', '烧烤'] * 3

print(food)

# 输出:['火锅', '烧烤', '火锅', '烧烤', '火锅', '烧烤']

Note: 列表的加法和乘法对元组也同样适用。

2) 分片

获取某个位置范围内的元素,用一对以冒号分隔的索引位置来进行操作。对列表进行分片后,会返回一个新的列表。这个新的列表包含这对索引位置所对应的连续的内容。

weekdays = ['周一', '周二', '周三', '周四', '周五']

print(weekdays[1:4])

# 输出:['周二', '周三', '周四']

以weekdays[1:4]为例,冒号左边是分片的起始位置,右边是分片的结束位置,遵循左闭右开原则,即包含起始位置不包含结束位置。

Note: 若省略结束位置,Python将其默认为列表的长度;若省略起始位置,Python将其默认为0,所以weekdays[:]相当于复制了一份weekdays列表。

分片中用正向索引和反向索引效果相同,如weekdays列表中,print(weekdays[2:])和print(weekdays[-3:])会输出相同的结果。

3) range()函数

range(start, stop, step)

# start: 计数从start开始,不填时默认为0

# stop: 计数到stop结束,但不包括stop

# step: 计数的间隔,不填时默认为1

range()函数最多支持3个参数,其中start和step可选。

my_range = range(0, 10, 2)

my_list = list(my_range)

print(my_list)

# 输出:[0, 2, 4, 6, 8]

my_list.append(10)

print(my_list)

# 输出:[0, 2, 4, 6, 8, 10]

Note: 在Python3中,range()函数返回的结果不是列表类型,而是range类型,要调用list()将其类型转换为列表才能使用列表的全部特性。

此外,range()函数的步长也可为负数,生成递减的列表:

my_range = range(0, -10, -2)

my_list = list(my_range)

print(my_list)

# 输出:[0, -2, -4, -6, -8]

Note: range()函数常出现在循环里,配合for循环一起使用。

Eg: 在屏幕上输出100个数字,其中前50个是1-100之间的偶数,后50个是1-100之间的奇数,包含1和100:

even_list = list(range(2, 101, 2))

odd_list = list(range(1, 100, 2))

print(even_list + odd_list)

4) zip()函数

作用:将多个列表中的元素一一组对,通过list()函数转换后,可以得到一个新的列表,列表中的每个元素都是由原先的几个列表中对应元素组成的元组。

Eg: 将四大名著的作者及其信息一一配对,放到新的序列当中:

names = ['吴承恩', '罗贯中', '施耐庵', '曹雪芹']

books = ['西游记', '三国演义', '水浒传', '红楼梦']

times = ['1501年-1582年', '1330年-1400年', '1296年-1370年', '1715年-1763年']

books_info = zip(names, books, times)

print(list(books_info))

# 输出:[('吴承恩', '西游记', '1501年-1582年'), ('罗贯中', '三国演义', '1330年-1400年'), ('施耐庵', '水浒传', '1296年-1370年'), ('曹雪芹', '红楼梦', '1715年-1763年')]

Note: zip()函数和range()函数一样,在Python3中返回的也不是列表类型,而是zip类型,要使用list()函数进行类型转换。

4. 常见错误调用sort()方法对列表排序时不必重新赋值,直接调用即可;

列表正向索引从0开始,最后一个元素索引是列表长度减1;

元组中的元素不可变,对元组进行修改会报错TypeError;

列表的索引必须是整数类型,除法运算得到的结果是浮点数,要调用int()函数进行类型转换,如:print(letters[int(len(letters)/2-3):int(len(letters)/2+4)])可打印letters列表中间位置的7个元素组成的新列表。

Reference:

[1] Wes McKinney. 2017. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython, 2nd Edition [M]. O'Reilly Media, Inc.

[2] CSDN博客. Python博客[OL]. https://www.csdn.net/nav/python. 2020.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值