【Python基础学习】3. 数据类型之列表及其操作

数据类型之列表及其操作

1. 什么是列表

列表 由一系列按特定顺序排列的元素组成。可以将任何东西加入列表中,其中的元素之间可以没有任何关系。鉴于列表通常包含多个元素,所以列表的命名通常采用复数的名称(如names )。

在Python语言中,列表用 方括号 [ ] 来表示,并用逗号来分隔其中的元素。

示例:

fruits = ['banana''apple''cherry''pear''fig']
print(fruits) 

示例输出:

['banana''apple''cherry''pear''fig'] 

如果直接将一个列表输出,则打印信息包括方括号等内部表示信息。

2. 列表的常用操作

2.1 列表访问

列表是有序集合,因此要访问列表的任何元素,只需将该元素的位置或索引告诉Python即可。要访问列表元素,可指出列表的名称,再指出元素的索引,并将其放在方括号内。

示例:

fruits = ['banana''apple''cherry''pear''fig']
print(fruits[0]) 

示例输出:

banana 

在Python中,第一个列表元素的索引为0,而不是1

在Python中,可通过将索引指定为-1 ,可让Python返回最后一个列表元素。但是当列表为空时,该方法出错。

示例:

fruits = ['banana''apple''cherry''pear''fig']
print(fruits[-1]) 

示例输出:

fig 

2.2 列表增加

列表的增加主要有两种操作,一种是在末尾追加,另一种是在中间任意位置插入,分别用到两个方法,如下:

  • append(object) :将值object添加到列表的末尾
  • insert(index, object) :将值object插入到列表的index位置(从0开始)

示例:

fruits = ['banana''apple''cherry''pear''fig']
print(fruits)

fruits.append('peach')
print(fruits)

fruits.insert(0'lemon')
print(fruits) 

示例输出:

['banana', 'apple', 'cherry', 'pear', 'fig']
['banana', 'apple', 'cherry', 'pear', 'fig', 'peach']
['lemon', 'banana', 'apple', 'cherry', 'pear', 'fig', 'peach'] 

2.3 列表修改

修改列表元素的语法与访问列表元素的语法类似。要修改列表元素,可指定列表名和要修改的元素的索引,再指定该元素的新值。

示例:

fruits = ['banana''apple''cherry''pear''fig']
print(fruits)

fruits[0] = 'lemon' print(fruits) 

示例输出:

['banana', 'apple', 'cherry', 'pear', 'fig']
['lemon', 'apple', 'cherry', 'pear', 'fig'] 

2.4 列表删除

在Python中,可以根据位置或值来删除列表中的元素。主要方法如下:

  • del语句:如果知道要删除的元素在列表中的位置,可以使用del语句进行删除;
  • pop() 方法:把列表看做一个栈,末尾的元素为栈顶,则pop() 方法实现将末尾的元素弹出(删除);也可使用pop(index) 方法,将任意位置的元素弹出(删除)
  • remove(object) 方法:如果知道要删除元素的具体值,可以使用该方法进行删除。

示例:

fruits = ['banana''apple''cherry''pear''fig''lemon']
print(fruits) # 第一种删除方法 del fruits[0]
print(fruits) # 第二种删除方法 fruit = fruits.pop()
print(fruits)
print(fruit)
fruits.pop(0)
print(fruits) # 第三种删除方法 fruits.remove('pear')
print(fruits) 

示例输出:

['banana''apple''cherry''pear''fig''lemon']
['apple''cherry''pear''fig''lemon']
['apple''cherry''pear''fig']
lemon
['cherry''pear''fig']
['cherry''fig'] 

2.5 列表组织与排序

可以对列表进行永久排序临时排序,主要方法如下:

  • sort() :对列表进行永久性排序。如果赋值(reverse=True),可以实现倒序排序。
  • sorted() :列表进行临时排序。如果赋值(reverse=True),可以实现倒序排序。

示例:

fruits = ['banana''apple''cherry''pear''fig''lemon']
print('原始列表:' + str(fruits))

print('临时排序:' + str(sorted(fruits)))
print('原始列表:' + str(fruits))

fruits.sort()
print('正序排序:' + str(fruits))

fruits.sort(reverse=True)
print('倒序排序:' + str(fruits)) 

示例输出:

原始列表:['banana''apple''cherry''pear''fig''lemon']
临时排序:['apple''banana''cherry''fig''lemon''pear']
原始列表:['banana''apple''cherry''pear''fig''lemon']
正序排序:['apple''banana''cherry''fig''lemon''pear']
倒序排序:['pear''lemon''fig''cherry''banana''apple'] 

当然还有部分其他的方法,如:

  • reverse() :翻转列表元素
  • len() :获取列表长度

示例:

fruits = ['banana''apple''cherry''pear''fig''lemon']
print('原始列表:' + str(fruits))

fruits.reverse()
print('翻转列表:' + str(fruits))

print('列表长度:' + str(len(fruits))) 

示例输出:

原始列表:['banana''apple''cherry''pear''fig''lemon']
翻转列表:['lemon''fig''pear''cherry''apple''banana']
列表长度:6 

2.6 列表切片

所谓列表切片,即截取列表中的部分元素组成一个新的列表。

示例:

fruits = ['banana''apple''cherry''pear''fig''lemon']
print('原始列表:' + str(fruits))

print('截取第2-4个元素:' + str(fruits[1:4]))

print('截取前3个元素:' + str(fruits[:3]))

print('截取第3个开始的剩余元素:' + str(fruits[2:]))

print('截取最后2个元素:' + str(fruits[-2:])) 

示例输出:

原始列表:['banana''apple''cherry''pear''fig''lemon']
截取第2-4个元素:['apple''cherry''pear']
截取前3个元素:['banana''apple''cherry']
截取第3个开始的剩余元素:['cherry''pear''fig''lemon']
截取最后2个元素:['fig''lemon'] 

这里注意,起始位置需要减一。

2.7 遍历列表

如果需要将列表中的每一个元素单独打印出来,或者每个元素都进行相同的处理,则需要对整个列表进行遍历。可以采用for循环来实现列表的遍历。

实例:

fruits = ['banana''apple''cherry''pear''lemon'] for fruit in fruits:
    print(fruit) 

示例输出:

banana apple
cherry
pear
lemon 

注意:关于for循环,要注意不要遗漏末尾的冒号(:),同时冒号后的缩进要保持一致,以保证对应的代码在for循环内。

我们再看一个示例:

fruits = ['banana''apple''cherry''pear''lemon'] for fruit in fruits:
    print(fruit)
print(fruits) 

这个示例的输出结果是这样的:

banana apple
cherry
pear
lemon
['banana''apple''cherry''pear''lemon'] 

如果把这个示例改成这样:

fruits = ['banana''apple''cherry''pear''lemon'] for fruit in fruits:
    print(fruit)
    print(fruits) 

没错,输出是这样的:

banana ['banana''apple''cherry''pear''lemon']
apple
['banana''apple''cherry''pear''lemon']
cherry
['banana''apple''cherry''pear''lemon']
pear
['banana''apple''cherry''pear''lemon']
lemon
['banana''apple''cherry''pear''lemon'] 

再改一下,改成这样:

fruits = ['banana''apple''cherry''pear''lemon'] for fruit in fruits:
    print(fruit)
  print(fruits) 

会是什么结果呢?没错,编译器会报错的。

所以在for循环内,需要避免不必要的缩进。

对于前面的切片列表,也同样适用于遍历。如以下示例:

fruits = ['banana''apple''cherry''pear''lemon'] for fruit in fruits[1:4]:
    print(fruit) 

示例输出:

apple cherry
pear 

2.8 复制列表

列表的复制,可以采用切片来实现。

示例:

fruits = ['banana''apple''cherry''pear''lemon']
fruits2 = fruits[:]

print(fruits)
print(fruits2) 

示例输出:

['banana', 'apple', 'cherry', 'pear', 'lemon']
['banana', 'apple', 'cherry', 'pear', 'lemon'] 

请看下面这个示例:

fruits = ['banana''apple''cherry''pear''lemon']
fruits_2 = fruits

print(fruits)
print(fruits_2)

fruits.append('peach')
print(fruits)

fruits_2.append('watermelon')
print(fruits_2) 

猜一下这个运行结果会怎样?是下面这样吗?

['banana', 'apple', 'cherry', 'pear', 'lemon']
['banana', 'apple', 'cherry', 'pear', 'lemon']
['banana', 'apple', 'cherry', 'pear', 'lemon', 'peach']
['banana', 'apple', 'cherry', 'pear', 'lemon', 'watermelon'] 

那么恭喜你,答错了。

实际运行结果是这样的:

['banana', 'apple', 'cherry', 'pear', 'lemon']
['banana', 'apple', 'cherry', 'pear', 'lemon']
['banana', 'apple', 'cherry', 'pear', 'lemon', 'peach']
['banana', 'apple', 'cherry', 'pear', 'lemon', 'peach', 'watermelon'] 

这是为什么呢?

这里将fruits 赋给fruits_2 ,而不是将fruits 的副本存储到fruits_2。这种语法实际上是让Python将新变量fruits_2 关联到包含在fruits 中的列表,因此这两个变量都指向同一个列表。

3. 数值列表

列表非常适合来存储数字集合。而Python提供了很多工具,可帮助你高效地处理数字列表。

Python也提供了一个函数:range()来帮助你快速生成一系列数字,然后使用 list() 函数将生成的一系列数字转换成列表。

关于 range() 的使用,主要有2种。

  1. range(start , end):这种定义,默认步长为1,即从start开始,到end-1为止,生成一系列数字。
  2. range(start , end , step):步长为step,从start开始,步长加step,直到最终结果达到或超过end为止。

示例:

numbers = list(range(39))
print(numbers)

numbers_2 = list(range(2143))
print(numbers_2) 

示例输出:

[345678]
[25811] 

3.1 数字列表的简单统计

主要有:

  • 求最大值max()
  • 求最小值min()
  • 求和sum()

示例:

numbers = list(range(39))
print(numbers)
print(min(numbers))
print(max(numbers))
print(sum(numbers)) 

示例输出:

[345678] 3 8 33 

3.2 数值列表的应用

如:如何创建一个列表,其中包含前10个整数(即1~10)的平方呢?

示例:

squares = [] for value in range(1,11):
    square = value**2     squares.append(square)

print(squares) 

可以简单一点:

squares = [] for value in range(1,11):
    squares.append(value**2)

print(squares) 

也可以再简单一点:

squares = [value ** 2 for value in range(111)]
print(squares) 

这种语法称为列表解析

要使用这种语法,首先指定一个描述性的列表名,如squares ;然后,指定一个左方括号,并定义一个表达式,用于生成你要存储到列表中的值。在这个示例中,表达式为value**2 ,它计算平方值。接下来,编写一个for 循环,用于给表达式提供值,再加上右方括号。在这个示例中,for 循环为for value in range(1,11) ,它将值1~10提供给表达式value**2 。请注意,这里的for 语句末尾没有冒号。

以上三段示例的结果均为:

[149162536496481100] 

4. 元组

何为元组?在Python中,将不能修改的值称为不可变的 ,而不可变的列表被称为元组 

元组看起来犹如列表,但使用圆括号而不是方括号来标识。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。

4.1 元组的定义

下面这个示例是如何定义,并输出指定位置的元素示例:

months = (135781012)
print(months)
print(months[3]) 

示例输出:

(1, 3, 5, 7, 8, 10, 12)
7 

4.2 元组的遍历

示例:

months = (1, 3, 5, 7, 8, 10, 12) print(months) for month in months:
    print(month) 

示例输出:

(1, 3, 5, 7, 8, 10, 12)
1
3
5
7
8
10
12 

4.3 元组的修改

元组不能单独修改某个元素,但是可以对整个元组进行整体修改。

示例:

months = (135781012)
print(months)
months = (46911)
print(months) 

示例输出:

(1, 3, 5, 7, 8, 10, 12)
(4, 6, 9, 11) 

关于列表的相关基础知识到此结束。

参考文献:

[1] Python编程:从入门到实践

相关推荐

发表评论

路人甲
看不清楚?点图切换

网友评论(0)