列表由一系列按特定顺序排列的元素组成。
列表能够在一个地方存储成组的信息,其中可以只包含几个元素,也可以包含数百万元素。
列表可以包含字母表中所有字、数字或所有家庭成员姓名的列表,也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。
1.在python中,用方括号([])表示列表,用逗号分割列表
例子: abcd = ['a','b','c','d']
print(abcd)
输出为 ['a','b','c','d'] python会将包括方括号的内容全部输出出来
2.要访问列表元素,可以指出列表的名称再指出元素的索引,这点和数组比较类似,列表的索引也是从0开始计算
例子:abcd = ['a','b','c','d']
print(abcd[0])
输出为a
3.访问最后一个元素可以指定索引为-1
例子:abcd = ['a','b','c','d']
print(abcd[-1])
输出为d
依次类推,-2表示倒数第二个列表元素,-3返回倒数第三个列表元素
4.上节介绍的字符串方法,也可以对列表元素使用
abcd = ['abc','b','c','d']
print(abcd[0].title())
输出为Abc
按列表元素的查找将列表元素重新定义
使用方法append()
例子:abcde = ['a','b','c','d']
abcde.append('e')
print(abcde)
输出为['a','b','c','d','e']
使用方法insert(),需要指定新元素的索引与值
例子:abcde = ['a','b','c','d']
#abcde.insert(0,'e') #输出为['e', 'a', 'b', 'c', 'd']
abcde.insert(1,'e') #输出为['a', 'e', 'b', 'c', 'd']
#abcde.insert(4,'e') #输出为['a', 'b', 'c', 'd', 'e']
print(abcde)
2.3.1.使用del语句删除元素(按位置删除)
例子:abcd = ['a','b','c','d','e']
del abcd[4]
print(abcd)
输出为['a','b','c','d']
适用于知道要删除的元素位置的情况
2.3.2.使用方法pop()删除元素
这里的pop与数据结构中出栈的pop效果一样,这里就是将列表类比栈,删除列表末尾的元素相当于弹出栈顶元素
注意pop所返回的值是弹出的元素
abcde = ['a','b','c','d','e']
pop_element = abcde.pop()
print(abcde)
print(pop_element)
输出为:['a','b','c','d']
e
pop也可以弹出列表中任何位置处的元素,只需要在括号中指定要删除元素的索引
abde = ['a','b','c','d','e']
pop_element = abde.pop(2)
print(abde)
print(pop_element)
输出为:['a','b','d','e']
c
2.3.3 根据值删除元素
使用方法remove()
abcde = ['a','b','c','d','e']
abcde.remove('a')
print(abcde)
输出为:['b','c','d','e']
主要指对列表的排序
使用方法sort()对列表进行永久性排序
abcde = ['b','d','e','c','a']
abcde.sort()
print(abcde)
输出为:['a','b','c','d','e']
向sort()方法传递参数reverse=True可以按与字母顺序相反的顺序排列
abcde = ['b','d','e','c','a']
abcde.sort(reverse=True)
print(abcde)
输出为:['e','d','c','b','a']
方法sort()永久性修改了列表元素的排列顺序
为了保留列表原来的排列顺序,可以使用函数sorted(),它可以按特定顺序显示列表元素而不影响原始排列。
abcde = ['b','d','e','c','a']
print("The original list:")
print(abcde)
print("\nThe sorted list:")
print(sorted(abcde))
print("\nThe original list again:")
print(abcde)
输出为:
The original list:
['b', 'd', 'e', 'c', 'a']
The sorted list:
['a', 'b', 'c', 'd', 'e']
The original list again:
['b', 'd', 'e', 'c', 'a']
若要对其反向临时排序,也可以传递参数reverse=True
abcde = ['b','d','e','c','a']
print("The original list:")
print(abcde)
print("\nThe sorted list:")
print(sorted(abcde,reverse=True))
print("\nThe original list again:")
print(abcde)
编译结果为:
The original list:
['b', 'd', 'e', 'c', 'a']
The sorted list:
['e', 'd', 'c', 'b', 'a']
The original list again:
['b', 'd', 'e', 'c', 'a']
abcde = ['b','d','e','c','a']
print(abcde)
abcde.reverse()
print(abcde)
编译结果为
['b', 'd', 'e', 'c', 'a']
['a', 'c', 'e', 'd', 'b']
方法reverse()是永久性排序,恢复原序可以再次调用reverse()即可
确定表长使用函数len()
abcde = ['b','d','e','c','a']
print(len(abcde))
编译结果为5
这里开始接触到for循环,不需要知道列表中有多少元素,而可以遍历到整个列表,可以见代码:
letters = ['a','b','c']
for letter in letters:
print(letter)
输出结果为:
a
b
c
Python从列表中取出一个字母,并将其存储在临时变量letters中,然后python打印前面存储到变量letter中的字母。对列表中的每一个元素,都将执行循环指定的步骤。
临时变量名称letter是可以自由选取的,使用单数和复数名称可以帮助判断处理的是单个列表元素还是整个列表
要注意两点
①for后面的冒号不能忘
②文本缩进
Python根据缩进来判断代码行与前一个代码行的关系,因此必须编写正确的代码,如果前一段写成
letters = ['a','b','c']
for letter in letters:
print(letter)
程序会无法运行
同样使用不同的缩进可以得到不同的结果,如
例1
letters = ['a','b','c']
for letter in letters:
print("letter "+letter+" is in the letters")
print("letter d is not in the letters")
编译结果为
letter a is in the letters
letter d is not in the letters
letter b is in the letters
letter d is not in the letters
letter c is in the letters
letter d is not in the letters
例2
letters = ['a','b','c']
for letter in letters:
print("letter "+letter+" is in the letters")
print("letter d is not in the letters")
编译结果为
letter a is in the letters
letter b is in the letters
letter c is in the letters
letter d is not in the letters
在for循环后,没有缩进的代码都只执行一次,不会重复执行。
函数range()可以生成一连串的数字
for value in range(0,5):
print(value)
编译结果为
0
1
2
3
4
这里从指定的数开始数,到第二个数停止,但不包含第二个数
要创建数字列表,可使用函数list()将range()的结果直接转换为列表,将range()作为list()的参数,输出为一个数字列表。
numbers = list(range(0,5))
print(numbers)
输出为数字列表:
[0, 1, 2, 3, 4]
函数range()还可以指定步长,即每次的间隔,如
numbers = list(range(0,5,2))
print(numbers)
输出为数字列表:
[0, 2, 4]
创建一个包含十个整数平方的列表:
numbers = []
for value in range(1,11):
number = value**2
numbers.append(number)
print("add number "+str(number))
print(numbers)
输出结果为
add number 1
add number 4
add number 9
add number 16
add number 25
add number 36
add number 49
add number 64
add number 81
add number 100
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
这里for循环遍历数字1-10,分别进行乘方(python中的乘方为**),保存在number中,再通过apped()添加到numbers的末尾。后面用到了上一章的str(),避免类型错误,将非字符串值表示为字符串,如果忽略了这个函数,会出现错误
TypeError: can only concatenate str (not "int") to str 即类型错误
这里书上只列举了min(),max(),sum(),在使用到时ke可以查文档等
列表解析将for循环和创建新元素的代码合并成一行,并自动附加新元素。这里只做了解,过后再补充。
如
numbers = [value**2 for value in range(1,11)]
print(numbers)
结果为
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
可以得到1-10的平方列表,避免编写三四行来生成列表。这些需要等到熟练创建常规列表后再学习。
切片即处理列表的部分元素,要创建切片,可指定要使用的第一个元素的索引和最后一个索引加一,如指定索引0-3,会输出0,1,2
letters = ['a','b','c','d','e']
print(letters[1:3])
print(letters[:4])
print(letters[2:])
print(letters[-3:])
这一段是不同的切片,其编译结果为:
['b', 'c']
['a', 'b', 'c', 'd']
['c', 'd', 'e']
['c', 'd', 'e']
为了便于理解,可以给该列表元素编号
a | b | c | d | e |
0 | 1 | 2 | 3 | 4 |
可以看出,索引1:3即提取列表第1-2个元素
没有指定第一个索引,则自动从列表开头开始,同理,没有指定第二个索引,则到表尾结束
负数索引与前一章用法一样,-1指最后一个,这里[-3:]就表示后三个字母
在for循环中使用切片即可遍历切片
letters = ['a','b','c','d','e']
for letter in letters[1:3]:
print(letter)
编译结果为:
b
c
注意不要忘记for循环的冒号。
复制列表需要用时切片,如果直接进行赋值,会与预想结果不一致,如
letters_A = ['a','b','c','d','e']
letters_B = letters_A
letters_A.append('f')
print(letters_A)
print(letters_B)
这里将letters_A赋给letters_B,实际上是将letters_B关联到包含在letters_A的列表,两个变量指向同一个列表,因此这里对letter_A添加元素,在letters_B中也会出现,编译结果为:
['a', 'b', 'c', 'd', 'e', 'f']
['a', 'b', 'c', 'd', 'e', 'f']
正确的复制方式为
letters_A = ['a','b','c','d','e']
letters_B = letters_A[:]
letters_A.append('f')
print(letters_A)
print(letters_B)
编译结果为:
['a', 'b', 'c', 'd', 'e', 'f']
['a', 'b', 'c', 'd', 'e']
可以比较出两者结果的差别。
Pyhon将不能修改的值称为不可变的,不可变的列表称为元组
元组使用圆括号来标识,可以像列表元素一样,使用索引访问元组。如果试图修改元组中元素的值,会返回错误信息,如
letters = ('a','b','c','d','e')
print(letters)
letters[0]='f'
print(letters)
编译结果为:
('a', 'b', 'c', 'd', 'e')
Traceback (most recent call last):
File "practice.py", line 3, in
letters[0]='f'
TypeError: 'tuple' object does not support item assignment
和列表一样,使用for循环遍历元组中的所有值
letters = ('a','b','c','d','e')
for letter in letters:
print(letter)
编译结果为
a
b
c
d
e
同样不要忘了缩进和冒号。
可以给存储元组的变量赋值,即重新定义整个元组
letters = ('a','b','c')
for letter in letters:
print(letter)
letters = ('c','b','a')
for letter in letters:
print(letter)
编译结果为
a
b
c
c
b
a
在列表两章中,对函数和方法的区别还有些不明确,这里先记录下来后续进行补充。