列表由一系列按特定顺序排列的元素的对象。它是一种有序的、可扩展与收缩的对象。如果学过其它语言,它看起来有点像数组,不过,列表中可以存储不同类型的对象
列表用[]
来表示;列表中的元素
用逗号进行分隔
例:定义一个包含不同类型的自行车列表,并将列表赋值给一个变量
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
打印这个列表看看
print(bicycles)
输出:
['trek', 'cannondale', 'redline', 'specialized']
访问列表元素
因为列表是有序的,所有可以通过索引
来访问到列表中的元素
列表中元素的索引默认从0开始
例:从bicycles
列表中取出trek
类型的自行车
print(bicycles[0])
输出:
treck
treck
在列表中的第一个位置,所以它的索引是0;通过索引访问元素可在列表名称后加上方括号[]
,在括号中填写上索引即可
print(bicycles[0].title()) # 将输出的内容开头大写
输出:
Treck
请记住,索引从0开始,第1个元素的索引是0,第2个元素的索引是1,第3个元素的索引是2,……第n个元素的索引是n-1
如果索引为-1,可直接访问到最后一个元素
print(bicycles[-1])
输出:
specialized
当索引值是正数时,取值是从左向右取的;如果索引是负数时,取值是从右往左取的;所以,当索引是-2时,将得到列表中倒数第2个元素
修改、添加和删除元素
列表不仅是有序的,而且是动态的,它可以在程序运行过程中添加、修改和删除其中的元素
修改
例:创建一个食物列表
foods = ['potato', 'tomato', 'noodles', 'apple']
将第一个元素potato
修改为banana
foods[0] = 'banana'
print(foods)
输出:
['banana', 'tomato', 'noodles', 'apple']
通过foods[0]
访问到了第一个元素potato
,再通将'banana'
赋值给该元素,便完成了修改动作
添加
例:在foods
列表中添加一个新的食物梨pear
foods.append('pear')
print(foods)
输出:
['banana', 'tomato', 'noodles', 'apple', 'pear']
append()
会将新元素添加到列表的末尾
如何在指定位置添加(插入)一个新元素呢?
foods.insert(1, 'peanut')
print(foods)
输出:
['banana', 'peanut', tomato', 'noodles', 'apple', 'pear']
insert()
方法可以将新元素插入到列表的指定位置,括号中的1表示要将新元素添加到索引1的位置上,peanut
表示要插入的新元素花生,相应的,其它元素的位置都会向右移动一个位置
删除
例:将foods
列表中的元素peanut
删掉
del foods[1]
print(foods)
输出:
['banana', 'tomato', 'noodles', 'apple', 'pear']
del
会将列表删除掉,如果想删除某个元素,可以通过访问索引的方式来删除其中的一个元素,在这里,通过访问索引1,删除掉了花生元素
如果这样写
del foods
print(foods)
输出:
Traceback (most recent call last):
File "", line 1, in
foods
NameError: name 'foods' is not defined
程序会报错,因为del foods
将foods对象从内存中删除掉了,程序再也找不到它了
使用pop()
将删除的元素返回
直接看例子:
food = foods.pop()
print(food)
print(foods)
输出:
pear
['banana', 'tomato', 'noodles', 'apple']
此时,列表中的最后一个元素不见了,而变量food
被方赋值了pear
;pop()
方法会将列表中最后一个元素弹出,可以将此时的列表想象成一个栈,最后一个进入栈中的元素将会被弹出,这是一个后进先出模式
弹出列表中任何位置的元素
food = foods.pop(1)
print(food)
print(foods)
通过在pop()
中指定索引来弹出指定位置的元素,这里将第2个元素tomato
弹出,并保存到了变量food
中
请牢记,当使用pop()
弹出一个元素时,该元素便从列表中消失了
如果知道元素的名称,却不知道它在列表的什么位置,如何删除?
此时可以使用remove()
方法
例:将foods
列表中noodles
元素删除
foods.remove('noodles')
print(foods)
输出:
['banana', 'tomato', 'apple']
元素noodles
从列表中被删除;remove()
方法接受一个字符串参数,用来指定要删除的元素的名称
如果noodles
元素在列表中出现多次,remove()
只要删除第一个匹配到的元素,也就是只会删除一次
列表排序
列表虽然是有序的,但并不代表所有的元素的排序都是合理的,Python提供了排序方法
sort()
可以对列表进行永久性的排序
例:
foods = ['potato', 'tomato', 'noodles', 'apple']
foods.sort()
print(foods)
输出:
['apple', 'noodles', 'potato', 'tomato']
可以看出,sort()
将foods
列表中的元素按首字母进行了排序,这是它针对字符串默认的排序方式
并且,此后这个列表将永远变成排序后的样子
将foods
列表中元素按首字母倒序排列
foods.sort(reverse=True)
print(foods)
输出:
['tomato', 'potato', 'noodles', 'apple']
向sort()
方法传递参数reverse=True
即告诉该方法是否将元素反转,也是就是倒序;默认reverse=Fase
,即不倒序
如果不想永久性的改变列表的排序结构,可以使用sorted()
方法
例:
foods = ['potato', 'tomato', 'noodles', 'apple']
print(sorted(foods))
print(foods)
输出:
['apple', 'noodles', 'potato', 'tomato']
['potato', 'tomato', 'noodles', 'apple']
可以看出,第一行是排序后的输出,第二行是原来的列表,其内容顺序并没有发生变化
同样的,也可以向sorted()
方法中传入reverse=True
参数,将列表进行倒序
foods = ['potato', 'tomato', 'noodles', 'apple']
print(sorted(foods, reverse=True))
print(foods)
输出:
['tomato', 'potato', 'noodles', 'apple']
['potato', 'tomato', 'noodles', 'apple']
有时候,列表中的元素并不都是小写字符串,不家可能有的是数字有的是字符串,这些情况下的排序是比较复杂的,将会在后面讨论
reverse()
函数可以将列表反转,并且只有反转的功能
例:
foods = ['potato', 'tomato', 'noodles', 'apple']
foods.reverse()
print(foods)
输出:
['apple', 'noodles', 'tomato', 'potato']
注意,reverse()
不是对列表进行排序,而是将原列表进行左右反转
reverse()
对列表的操作是永久性的
查看列表的长度
foods = ['potato', 'tomato', 'noodles', 'apple']
print(len(foods))
输出:
4
len()
函数将返回列表foods
的长度,也就是元素的个数
注意,如果写错索引位置,将会导致数据错误或系统报错,新手常会现出索引上的问题
例:
foods = ['potato', 'tomato', 'noodles', 'apple']
print(foods[4])
foods
列表中最大索引是3,报错内容:
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/s.py", line 2, in
print(foods[4])
IndexError: list index out of range
附语:
Python语句的末尾可以不写分号,当然写上分号也是正确的,为了简洁与美观,一般不会在语句末尾加分号
目录
上一章 Python Learning-变量和简单数据类型
下一章 Python Learning-列表的更多操作