零基础学python 第二章 列表和元组

概述

>>> abc = [1, 2, 'a', 10]
>>> xyz = (1, 2, 'a', 10)
>>> abc
[1, 2, 'a', 10]
>>> xyz
(1, 2, 'a', 10)
>>>

如上代码,abc为列表,xyz为元组。粗俗地说,就是方括号定义的是列表,圆括号定义的是元组。
列表和元组的内容,可以是各种值,也可以是各种数据结构。如以下代码片段所示:

>>> list1 = ['a', 1, (5,6,7), [3,5]]
>>> list1
['a', 1, (5, 6, 7), [3, 5]]

问题元组和列表都是表示一些元素的序列,好像作用是差不多的。为什么要有这样的区分呢?
我们接着运行下面的语句:

>>> abc[0] = 11
>>> abc
[11, 2, 'a', 10]
>>> xyz[0] = 11
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
  • abc成功修改第0个元素为11
  • xyz无法修改第0个元素的值报错,因为它是不可变的。

列表和元组有本质区别,列表内容可变,元组内容不可变

通用序列操作

本章说明列表和元祖等序列的工作操作。

索引操作

找到序列中的某个元素。

>>> list_var = ['aaa', 123, (1,2), 35, 'xyz', 44]
>>> list_var[0]
'aaa'
>>> list_var[-1]
44
>>> list_var[3]
35
>>> list_var[10]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
  • 这里用的列表,元组也是同样的表现
  • 序列索引,使用[]符号,索引值从0开始。0表示第一个元素,1表示第二个元素,依次类推
  • 序列值为-1表示最后一个元素,-2表示倒数第二个元素,依次类推
  • 如果索引值超出了序列的总大小,会报Exception
切片

选取序列中的一部分元素出来重新生成一个序列。

>>> list_var = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list_var[3:7]
[4, 5, 6, 7]
>>> list_var[1:7:2]
[2, 4, 6]
  • 两个索引用冒号隔开,分别表示切片的起始位置和结束位置。
    注意 起始位置是包含索引值的元素,结束位置是不包含索引值的元素。如上面的 list_var[3:7]的结果中包含了位置3的元素,但是不包含7位置的元素。
  • 可以写3个索引值,用两个冒号分开,如上面代码所示。第三个索引表示步长。步长表示间隔多少个元素。如list_var[1:7:2]的意思是起始索引为1,结束位置为7,步长为2。步长为2表示选一个值然往后移动2个元素读取下一个值。
序列相加

两个列表合并成一个。

>>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
乘法

序列乘以n时,重复序列n次

>>> [1] * 5
[1, 1, 1, 1, 1]

注意 乘操作,不是成员元素的值乘以5。这个对于新人来说,一般容易弄混。

成员资格

表示某个值是否在序列中存在。用关键字 in 。

>>> var = [ 'aa', 'bb', 'cc']
>>> 'aa' in var
True
>>> 'abc' in var
False
长度、最大值、最小值
>>> var = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> len(var)
9
>>> max(var)
9
>>> min(var)
1

如上面的代码所示。直接调用内置函数 len() 获取长度,max() 获取最大值, min() 获取最小值。
问题如果序列的值有字符串,最大值和最小值会怎么样?

列表的独特操作

给元素赋值
>>> x = [1, 2, 3]
>>> x[1] = 8
>>> x
[1, 8, 3]

列表的值是可变的,所以可以个列表的元素重新赋值。

删除元素

删除列表中的一个元素。使用关键字 del 。

>>> var = [0, 1, 2, 3]
>>> del var[1]
>>> var
[0, 2, 3]
排序
>>> var = [ 3, 5, 9, 1, 6]
>>> sorted(var)
[1, 3, 5, 6, 9]
>>> var
[3, 5, 9, 1, 6]

使用内置函数 sorted() 给序列排序,返回排序后的列表。
注意排序后返回的序列是一个新序列,哪怕是给列表排序,也会返回新序列。

列表的方法
append()

向列表末尾最佳一个元素

>>> var = [1, 2, 3]
>>> var .append(88)
>>> var
[1, 2, 3, 88]
clear()

把列表的内容清空。

>>> var = [1, 2, 3]
>>> var.clear()
>>> var
[]
sort()

列表排序,注意 会修改列表本身的内容。

>>> var = ['shanghai', 'chongqing', 'hangzhou', 'nanjing']
>>> var.sort()
>>> var
['chongqing', 'hangzhou', 'nanjing', 'shanghai']

这里就列了这三个常用的方法。如果想学习更多方法,可以看 《python基础教程》的2.3.3 列表方法 这一节。

元组

元组是不可修改的序列。
元组的定义和列表的区别在于,元组用的是(),列表用的是[]。

练习题

请在电脑上完成以下操作,作为本章知识点的考核。

  1. 定义列表保存湖南省的6个城市名称:changsha,zhuzhou,xiangtan,hengyang,shaoyang,yueyang
  2. 定义列表保存河南的6个城市名称:zhengzhou,kaifeng,luoyang,pingdingshan,anyang,hebi
  3. 把以上2个列表合并成一个序列,并把列表中的12个城市中按照拼音排序的第3个城市打印出来。提示:打印语句为 print()

要求: 使用pycharm工具编辑和运行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值