Python基础:操作list以及tuple的引入

又是一篇臭长臭长的....下次尽量拆开来写吧 # 遍历整个列表 在C语言中,我们如何实现“遍历”这一操作呢?答案显而易见,使用循环。在Python中同理,我们要对列表中的每一个元素进行操作,那么就需要遍历整个list,而要遍历整个list,循环语句是不可缺少的。 ## 1. 循环 还是以那些我买不起的自行车品牌为例,假如现在我需要把列表bicycles中的所有元素一一打印出来,需要怎么操作呢?

1
2
3
4
bicycles = ['trek','specialized','giant','santa cruz']

for bicycle in bicycles:
print(bicycle)
- 首先定义一个列表bicycles - 紧接着定义一个for语句,这行代码让Python从列表bicycles中取出一个元素(这里是自行车品牌),并将其存储在变量bicycle中 - 最后,让python打印前面储存在变量bicycle中的变量即可

输出结果:

1
2
3
4
trek
specialized
giant
santa cruz
可以看出来,我们达到了一一打印整个list中的元素的目的,for语句循环地执行,直到列表中的元素全部被执行过为止。 但这里有一个细节令人注意:为什么第四行代码print语句前会有一个缩进? ## 2. 缩进 用过Word系列办公工具的同学可能知道缩进,在电脑上敲出缩进的方法通常为:在编辑过程中按下键盘上的tab键。那么缩进在Python中是做什么的,有什么意义呢? Python是根据缩进来判断代码行与前一个代码行的关系的,如果一行代码前有缩进,那么意味着这行代码被包含于上一个没有缩进的代码行中。看起来有点不好理解,下面来演示一下这到底是什么意思。 ### a. 在for循环中执行更多操作 有的时候,我们不仅想要打印出列表中的内容,还想在此基础上增加一句别的内容,如何处理呢?
1
2
3
4
5
bicycles = ['trek','specialized','giant','santa cruz']

for bicycle in bicycles:
print('The ' + bicycle.title() + ' bicycle is so great!')
print("I can't wait to buy a " + bicycle.title() +' bike')
输出效果:
1
2
3
4
5
6
7
8
The Trek bicycle is so great!
I can't wait to buy a Trek bike
The Specialized bicycle is so great!
I can't wait to buy a Specialized bike
The Giant bicycle is so great!
I can't wait to buy a Giant bike
The Santa Cruz bicycle is so great!
I can't wait to buy a Santa Cruz bike
可见,for语句后的两个print前都使用了相同的缩进,意味着这两个print语句都被包含于同一个for语句下 ### b. 在for循环后执行更多操作 如果我并不想在每一次循环中都输出,而只想在最后一次循环后输出怎么办呢?
1
2
3
4
5
bicycles = ['trek','specialized','giant','santa cruz']

for bicycle in bicycles:
print('The ' + bicycle.title() + ' bicycle is so great!')
print("I can't wait to buy a " + bicycle.title() +' bike')
可以看到,现在的代码中,第二个print语句前并没有缩进,因而不会被包含在循环语句中,所以,只有当循环语句执行完毕之后才会进入第二个print语句中。 输出结果:
1
2
3
4
5
The Trek bicycle is so great!
The Specialized bicycle is so great!
The Giant bicycle is so great!
The Santa Cruz bicycle is so great!
I can't wait to buy a Santa Cruz bike
## 3. 数字列表 有的时候,我们仅仅想处理数字内容,但又不想如此麻烦的初始化列表,这时该如何做呢? ## range()函数的用法 Python的自带函数range()可以轻松的生成一段数字列表,它的语法如下:
1
2
3
4
#range(start, stop[, step])
#单参数时:
for value in range(5):
print(value)
输出结果:
1
2
3
4
5
0
1
2
3
4
单参数时,默认的起点
start0,传入的参数为结束点,步进值默认为1
1
2
3
4
#range(start, stop[, step])
#双参数时:
for value in range(1,5):
print(value)
输出结果:
1
2
3
4
1
2
3
4
双参数时,传入的参数分别为起点
start和终点stop,步进值同样默认为1
1
2
3
4
#range(start, stop[, step])
#三参数时:
for value in range(1,5,2):
print(value)
输出结果
1
2
1
3
这个时候,三个参数都将被自定义,分别为起点
start、终点stop和步进值step### 创建数字列表 明白了range()的用法后,创建数字列表的方法好像呼之欲出了,但还是少了点什么。在Python中,有一类函数地作用是将数据类型转换,比如int()是将传入的参数转换为int型数据。那么是不是可以用同样形式的list()来生成列表型数据呢?当然可以:
1
2
numbers = list(range(1,6))
print(numbers)
输出结果:
1
[1, 2, 3, 4, 5]
可见,我们的想法是正确的,确实可以这样生成数字型list,下面是我们常用的定义一个数字型list的方法:
1
2
3
4
squares = []
for square in range(1,11):
squares.append(square**2)
print(squares)
这里我们想创建一个包含1~10的平方数的数字型list,其中
**指的是平方运算,这几行代码的输出结果为:
1
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
### 数字列表的简单统计计算 有的时候我们需要找到一个数字型list中的最大值、最小值和均值==总和,如果是在C语言中,我们可能会用循环语句来做,但是在Python中,我们可以使用现有函数来完成它:
1
2
3
4
statistics = [1,2,4,9,12,435,1,23,34,123,45645,2312,35,123,675,345,23434,45]
print('最大值为' + str(max(statistics)))
print('最小值为' + str(min(statistics)))
print('总和为' + str(sum(statistics)))
输出结果:
1
2
3
最大值为45645
最小值为1
总和为73258
## 4. 列表的切片 有的时候我们并不想处理整个列表,而是想处理列表中的部分内容,这该怎么做呢?这时候就应该使用我们的切片工具。 ### 切片 下面,我只想打印出从第一个到第三个我买不起的自行车品牌:
1
2
bicycles = ['giant','trek','specialized','santa cruz','cannondale']
print(bicycles[0:3])
输出结果:
1
['giant', 'trek', 'specialized']
值得注意的是,切片时传入的**第一个**参数和索引号是一一对应的,而第二个参数为索引号+1。 也就是说,如果想从第1个元素开始,那么第一个参数应该是
0而非1;如果想终止于第4个元素,那么第二个参数就是4如果参数不填的话,索引的第一个参数默认为0,第二个值默认为列表中元素的个数 同样,与列表的索引方式相同,也可以用负索引号来完成切片:
1
2
3
4
bicycles = ['giant','trek','specialized','santa cruz','cannondale']
print(bicycles[:3])
print(bicycles[2:])
print(bicycles[-3:3])
输出结果:
1
2
3
['giant', 'trek', 'specialized']
['specialized', 'santa cruz', 'cannondale']
['specialized']
### 遍历切片 如果要遍历列表中的部分元素,可以在
for循环中使用切片:
1
2
3
bicycles = ['giant','trek','specialized','santa cruz','cannondale']
for bicycle in bicycles[1:4]:
print(bicycle.title())
输出结果:
1
2
3
Trek
Specialized
Santa Cruz
这样就可以实现在整个列表中进行部分操作,而非整个列表一起操作 ## 5. 列表的复制 有的时候需要根据现有的list创建新的list,就需要用到列表的复制。 要复制list,可以创建一个包含整个list的切片,方法是:同时省略起始索引和终止索引
[:]。这样就可以创建一个始于第一个元素,终于最后一个元素的列表。
1
2
3
4
bicycles = ['giant','trek','specialized','santa cruz','cannondale']
my_bicycles = bicycles[:]

print(my_bicycles)
输出结果:
1
['giant', 'trek', 'specialized', 'santa cruz', 'cannondale']
可能有的人会疑惑了,为什么要这样花里胡哨的复制列表呢?直接
list1 = list2不好嘛? 确实,这样确实可以得到相同的列表,但是这步操作并不是我们想要的"复制",而仅仅是更换了列表的变量名,什么意思呢?看下面的操作就明白了:
1
2
3
4
5
6
7
8
bicycles = ['giant','trek','specialized','santa cruz','cannondale']
my_bicycles = bicycles

bicycles.append('specialized')
my_bicycles.append('polygon')

print(bicycles)
print(my_bicycles)
输出结果:
1
2
['giant', 'trek', 'specialized', 'santa cruz', 'cannondale', 'specialized', 'polygon']
['giant', 'trek', 'specialized', 'santa cruz', 'cannondale', 'specialized', 'polygon']
可以看到,我明明是对两个list进行不同的操作,一个增加了
specialized,另一个增加了polygon,但是输出的结果却是一样的,这是因为直接粗暴地list1 = list2只是更换了变量名,无论如何操作都只操作同一个list。而用切片的方法才能在真正意义上新建一个相同列表:
1
2
3
4
5
6
7
8
bicycles = ['giant','trek','specialized','santa cruz','cannondale']
my_bicycles = bicycles[:]

bicycles.append('specialized')
my_bicycles.append('polygon')

print(bicycles)
print(my_bicycles)
输出结果:
1
2
['giant', 'trek', 'specialized', 'santa cruz', 'cannondale', 'specialized']
['giant', 'trek', 'specialized', 'santa cruz', 'cannondale', 'polygon']
实践才是检验真理的唯一标准!!!! # 元组 元组型数据结构
tuple与列表型list最大的不同就在于,**列表中的元素是可以被修改的**,如增加、删除、替换等,而**元组中的任何一个元素在被定义后就不可被修改**。 且**列表是用中括号[]来定义的,而元组是用小括号()来定义的** 但是这不意味着元组本身是不可修改的,元组是可以被删除的,只不过元组中的元素是不可删除的。元组也可以进行类似列表的拼接、索引、求最大/最小值等等。 由于tuple型和list`型的操作大同小异,因此在这里只描述一下如何定义元组,不再进行深入拓展:
1
2
3
bicycles = ('giant','trek','specialized','santa cruz','cannondale')

print(bicycles)
输出结果:
1
('giant', 'trek', 'specialized', 'santa cruz', 'cannondale')

作者

Hank.Gan

发布于

2020-02-14

更新于

2021-08-05

许可协议

评论