python学习笔记(四)列表深入

python学习笔记(四)列表深入

1、遍历列表
python中遍历列表通常采用一个特殊的语法,相信了解过C++的人也都知道——for循环。
for循环的工作原理实际上是把列表中的元素按次序分别提取出来进行操作,所以我们需要另外建立一个变量(这个变量的变量名是任意的,但是我们通常默认选取有利于理解的)来暂存提取出来的列表元素:

languages = ['c', 'python', 'java', 'ruby']
for language in languages:
	print(language)

这个代码段的功能是分别将列表中的元素打印出来,因此运行结果为:

c
python
java
ruby

下面我们深入了解一下for循环
首先,第一眼看过去,for循环有三个值得注意的地方:
第一处是“in”,这告诉我们变量language存储的值都是languages“里”的元素;
第二处是“:”,冒号标志着for循环的开始,这类似于C++的for循环中的大括号({});
第三处就是缩进(tab制表符或者\t),跟在冒号之后的缩进部分都是for循环的循环体,也就是每个提取出来的元素需要分别执行的操作,如果出现一行不再缩进的代码,那么for循环就随之结束,后面的代码就算缩进,也没有意义了。举例:

languages = ['c', 'python', 'java', 'ruby']
for language in languages:
	print(language)
	print("I like " + language.title() + " very much!\n")	#for循环执行完这一行就结束,继续按次序提取列表元素,知道所有的元素都被遍历完毕,才会执行后面的代码
print("Over!")

运行结果为:

c
I like C very much!

python
I like Python very much!

java
I like Java very much!

ruby
I like Ruby very much!

Over!

注意:这里提一句,python语言默认根据缩进来判断代码行与前一个代码行的关系。细品!!!!

2、数字列表
数字列表的创建与列表类似:

numbers = [1, 2, 4, 5]
print(number[1])
print(number[3])

运行结果为:

2
5

这里强化一下索引的概念。
但是,当我们需要一串连续的整数,并且列表长度较大时,采用这样的方式创建列表就会显得很麻烦,而 range() 函数就能让我们轻松地生成一系列整数(注意是数字,而不是列表)。range() 函数需要两个参数,这里需要注意一点,生成的整数是从第一个参数开始,依次加一知道第二个参数的前一个数,即

for value in range(1, 6):
	print(value)

运行结果为:

1
2
3
4
5

实际上 range() 函数可以传入三个参量,我们可以将 range() 得到的数字串看成一个等差数列,当未传入第三个参数的时候,公差缺省为1,如果传入了第三个参数,则将公差替换。

for value in range(1, 11, 2):
	print(value)

运行结果为:

1
3
5
7
9

但是,我们需要的是数字列表啊,此时还需要另一个函数—— list()。
函数 list() 将 range() 的结果直接转换为列表,需要将 range() 作为 list() 的参数。

numbers_0 = list(range(1, 6))
numbers_1 = list(range(1, 11, 2))
print(numbers_0)
print(numbers_1)

运行结果为:

[1, 2, 3, 4, 5]
[1, 3, 5, 7, 9]

3、一般来说,有一定规律的数字列表都可以用 range() 和 list() 两个函数配合创建,只有杂乱无序的数字列表才需要我们手动输入创建,例如我们想得到一个平方数列表:

squares_numbers = []
for value in range(1, 6):
	square = value**2
	squares_numbers.append(square)
print(squares_numbers)

运行结果为:

[1, 4, 9, 16, 25]

4、数字列表的常用函数
min() 函数返回数字列表最小值
max() 函数返回数字列表最大值
sum() 函数返回数字列表元素之和

numbers = [1, 3, 5, 7, 9, 0, 2, 4, 6, 8]
print(min(numbers))
print(max(numbers))
print(sum(numbers))

运行结果为:

0
9
45

5、列表解析
列表解析是一种更加便于我们创建数字列表的语法,它是上文凝练之后的结果。

squares_numbers = [value**2 for value in range(1, 6)]
print(squares_numbers)

运行结果为:

[1, 4, 9, 16, 25]

列表解析的语法更加优美,但是需要一定的熟练度,它给人一种“句子”的感觉。具体的理解可以参照第三点,它可以看作例句的翻译。

6、切片
切片本质上也是一个列表,但是切片的创建基于既有列表,或者说是既有列表的一部分。
要创建切片,一般需要指定两个索引(两个索引的理解与 range() 函数的前两个参数理解相似),但也是可缺省的。

languages = ['c', 'python', 'java', 'ruby', 'c++']
print(languages[0:3])	#注意这里的3
print(languages[:4])	#缺省第一个索引默认从头提取
print(languages[2:])	#缺省第二个索引默认提取到末尾
print(languages[-3:])	#注意倒数的用法
print(languages[:])	#两个都缺省实际上是复制了一个列表,其中的妙处后文再讲

运行结果为:

['c', 'python', 'java']
['c', 'python', 'java', 'ruby']
['java', 'ruby', 'c++']
['java', 'ruby', 'c++']
['c', 'python', 'java', 'ruby', 'c++']

例子中的 languages[0:3] 实际上已经是一个新列表了,我们可以将它赋给一个新变量,但我本人更建议将它理解为一个特殊的变量名直接使用,因为这样做更有利于我们理解。

7、列表的复制
有时候我们需要对原有列表的值进行一些变动,但是我们又想保留原有的列表,那么这时候我们就需要复制列表。

A_languages = ['python', 'java', 'ruby']
B_languages = A_languages[:]
A_languages.append('c')
B_languages.append('c++')
print(A_languages)
print(B_languages)

运行结果为:

['python', 'java', 'ruby', 'c']
['python', 'java', 'ruby', 'c++']

这样我们可以对两个列表分别进行操作,而不会互相影响。但也许你会问:
“为什么非要‘B_languages = A_languages[:]’不可呢,
直接‘B_languages = A_languages’不香吗?!”
在这里,我可以很负责任的说:“不香!!!!”看下面的例子:

A_languages = ['python', 'java', 'ruby']
B_languages = A_languages
A_languages.append('c')
B_languages.append('c++')
print(A_languages)
print(B_languages)

运行结果为:

['python', 'java', 'ruby', 'c', 'c++']
['python', 'java', 'ruby', 'c', 'c++']

相信大家已经明白了这中间的差别,如果还不明白的话,可以稍微了解一下“值传递”和“引用传递”。

8、元组
在刚刚学习列表的时候,我曾提到过它不同于C++中的数组,因为它是动态的,但是有时候我们又需要静态的量,即需要创建一系列不可修改的元素,这时python为我们提供了——元组。
元组与列表类似,但是使用圆括号,而且元组的元素只能访问,不能修改。注意:元组变量是可以修改的,我们若想修改一个元素,需要把整个元组都替换掉

numbers_static = (1, 2, 3)
print(numbers_static[1])	# valid
numbers_static[1] = 4		# invalid
numbers_static = (1, 4, 3)	# valid

元组的其他用法大多与列表类似(只要不涉及到元素值的修改),这里就不一一赘述了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值