python入门学习之列表

列表

在了解了python的基本语法后,对python中的列表与C语言中的数组类似,但是列表不限制数据类型,一个数组中只能存放同一数据类型的数据,但是在python中同一列表既可以加入整型数字、字符串等等,为很多处理带来了极大便利,且列表的长度不受限制,可以任意修改,概括而言,列表的特点是:兼收并蓄。

创建列表

创建一个列表非常简单,只需要将当前要放入列表中的元素用一个中括号括起来,各元素之间用逗号隔开即可。为方便后续对列表的处理,为列表起一个名字,如下所示。

heros = ["钢铁侠", "绿巨人", "灭霸", "蜘蛛侠", "黑寡妇"]

访问列表元素

顺序访问

列表也是一个序列,可以按照顺序访问列表上的每一个元素,最简便的方法即使用for循环,代码如下:

for each in heros:
    print(each)

下标访问

如果只是想要访问列表中特定位置处的某个元素,只需要输入对应元素小标即可,python中下标从0开始。

heros[0]
heros[1]
heros[len(heros) - 1]  ##访问最后一个元素
heros[-1] ##访问最后一个元素 
heros[-2] ##倒数第二个元素

切片

切片就是将单个索引值变成一个范围,可以直接提取列表中某一范围的元素,与MATLAB类似

heros[0:3] ##前三个元素的值
heros[:3] ## 从第一个到第三个元素
heros[:] ##所有元素
## [start:end:step] step为正为顺序步进,为负代表逆序步进
heros[::2] ## 2为列表步进值
heros[::-2] ##逆序
heros[::-1] ##整个列表的倒序输出

增删改查

列表的长度不是一经初始即一成不变,随时随地都可以添加元素,列表中添加元素的方法主要有:
append:列表末尾添加指定元素
extend:允许添加一个可迭代对象,直接加入多个元素
insert:可在列表任意位置插入元素,有两个参数,第一个插入位置,第二个为插入元素

heros.append("神奇女侠") ## 在列表末尾加入
## 结果:['钢铁侠', '绿巨人', '灭霸', '蜘蛛侠', '黑寡妇', '神奇女侠']
heros.extend(["忍者神龟", "雷神"])
## 结果:['钢铁侠', '绿巨人', '灭霸', '蜘蛛侠', '黑寡妇', '神奇女侠', '忍者神龟', '雷神']

## 上述两种添加元素方法同样可以使用切片完成
heros[len(heros):] = ["神奇女侠", "忍者神龟", "雷神"]

heros.insert(3,"鹰眼")
## 结果 ['钢铁侠', '绿巨人', '灭霸', '鹰眼', '蜘蛛侠', '黑寡妇', '神奇女侠', '忍者神龟', '雷神']

删除某个特定元素使用的是remove,需要注意的是如果列表中存在多个选择删除的元素,那么remove只会删除第一个;其次,若指定删除的元素,并不存在,那么程序将会报错。
如果需要删除某个特定位置处的元素,可以使用pop操作。
clear操作可以直接将列表清空。

heros.remove("灭霸") 
heros.pop("5")
heros.clear()

替换列表中的元素只需利用下标索引找到元素,然后用赋值运算符替换即可。此外,可以利用切片实现多个连续元素的替换

heros[3] = "金刚狼"
heros[3:5] = ["罗刹女", "队长"]

列表中还有对数据进行排序的操作:

num = [2, 3, 1, 8, 4, 9, 0]
num.sort()  ## 默认递增顺序序排序
num.reverse() ## 先递增排序后再反转 实现递减
num.sort(reverse=True) ## 直接实现递减排序

列表中提供count操纵可以查找某个元素出现的次数,index操作查找某元素出现的位置,值得注意的是,当列表中有多个相同元素,那么使用index时返回的是第一个元素出现的位置。此外,index中还可以指定查找的范围。
copy操作可用于复制列表

num = [2, 3, 1, 8, 4, 9, 0, 3, 2, 3, 4, 5, 2, 0]
num.count(3) ## 查找3出现的次数
num.index(1)
## index(a,start,end)
num.index(4,1,6) ## 1号元素开始6号之前第一次出现4的位置
num_copy = num.copy() ## 复制整个列表
num_copy1 = num(:)

列表的加法和乘法

列表的加法即拼接,+号两边必须均为列表

a = [1, 2, 3]
b = [4, 5, 6]
c = a + b
## 结果:c = [1, 2, 3, 4, 5, 6]
a * 3

列表的乘法即重复列表中全部元素的n次

列表嵌套

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
## 访问嵌套列表
matrix[0]  ## 矩阵的第一行
matrix[0][0]  ## 第一行第一列
for i in matrix:
	for each in i:
		print(each, end=' ')
	print()
## 初始化一个矩阵
A = [0] * 3
for i in range(3):
	A[i] = [0] * 3  ## 三行三列的全0矩阵
## 注意:不能使用A = [[0] * 3] * 3的方法,这样子得到的A,每一行都是指向同一个[0, 0, 0],即三行都是同一个对象

列表推导式

列表推导式的语法结构:
[expression for target in iterable]
在程序执行过程中,列表推导式比循环语句执行速度快一倍,列表推导式的结果是一个列表,所以必须加上一对**[ ]**,expression表达式相当于循环体,使用举例如下:

x = [i for i in range(10)] ## x中存放的是0-9的整数
x = [i + 1 for i in range(10)] ## x中存放的是1-10的整数
y = [c * 2 for c in "LOVE"] 
## 结果:['LL', 'OO', 'VV', 'EE']
## 使用列表推导式提取矩阵列
matrix = [[1, 2, 3],
		  [4, 5, 6],
		  [7, 8, 9]]
col2 = [row[1] for row in matrix]  ## 提取第二列
diag = [matrix[i][i] for i in range(len(matrix))] #取主对角线元素
diag2 = [matrix[i][len(matrix) - 1 - i] for i in range(len(matrix))] 
# 列表推导式创建矩阵
s = [[0] * 3 for i in range(3)]

列表推导式中还可以添加一个用于筛选的if分句
[expression for target in iterable if condition]
执行顺序为:先执行for语句,再判断条件,最后输出

even = [i for i in range(10) if i % 2 == 0] # 1-9中的偶数
words = ["Great", "Fine", "Fantastic", "Good"]
word = [words[i] for i in range(len(words)) if words[i][0] == 'F'] #取出words中F开头的单词
word = [w for w in words if w[0] == 'F'] #python熟练后的结果T_T

嵌套列表推导式
[expression for target1 in iterable
for target2 in iterable
……
for targetN in iterable]

嵌套的推导式相当于嵌套的循环

matrix = [[1, 2, 3],
		  [4, 5, 6],
		  [7, 8, 9]]
flatten = [col for row in matrix for col in row] # 将矩阵展开
# 外层循环在前,嵌套的内层循环在后

列表推导式的终极语法 终于快结束了 晕
[expression for target1 in iterable1 if condition1
for target2 in iterable2 if condition2
……
for targetN in iterableN if conditionN]

_ = [[x, y] for x in range(10) if x % 2 == 0 for y in range(10) if y % 3 == 0]
# _表示临时变量 懒得想名字惹T_T


终于……结束……了,第一天的列表学习告一段落
这篇文章主要用于自己学习的记录,第一次写,难免存在很多错误遗漏,欢迎大家批评指正,如果能坚持,会一直写下去(☆▽☆) 一起学习叭!!!
最后,感谢小甲鱼的python视频,Keep it Simple and Stupid

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值