序列类型又分为可变序列和不可变序列。可变序列表示可以原处修改的序列,不可变序列意味着不允许原处修改。例如,列表是可变序列,字符串是不可变序列。
序列的通用操作
下面这些操作是序列通用的,无论是可变、不可变序列。但通用并不意味着所有序列都支持这些操作,有些特殊的序列因为某些原因不支持某些操作也是合理的。
注意:python中序列操作在索引越界的时候都会报错。
1.测试元素是否存在
x in S和x not in S,返回True或False。例如:
>>> 'a' in "abcd"
True
>>> 'aa' in "abcd"
False
>>> 'ab' in "abcd"
True
>>> 3 in [1,2,3,4]
True
2.加法和乘法符号
S1 + S2
或S * N
或N * S
,其中S1和S2是同一种序列类型,N表示序列的重复次数。
例如:
>>> [1,2] + [3,4]
[1, 2, 3, 4]
>>> [1,2] \* 3
[1, 2, 1, 2, 1, 2]
>>> 3 \* [1, 2]
[1, 2, 1, 2, 1, 2]
注意,序列中保存的是元素的引用地址,所以对于序列中的可变元素,+ *
时需要注意修改的影响范围:
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> L = [1,2,3,4]
>>> L1 = [['a'],['b']]
>>> L0 = L + L1
>>> L0
[1, 2, 3, 4, ['a'], ['b']]
>>> L1[0][0] = "aa"
>>> L0
[1, 2, 3, 4, ['aa'], ['b']]
上面修改"a"为"aa"也会影响到+的结果L0,因为[‘a’]是一个可变对象。同样对于*的重复操作,也是拷贝引用:
>>> L = []
>>> L1 = [L] \* 3
>>> L1
[[], [], []]
>>> L.append(3)
>>> L1
[[3], [3], [3]]
3.len()、max()和min()函数
len()返回序列的元素个数,也就是序列的长度。min()和max()分别返回序列中最小、最大的元素。
>>> len(L), min(L), max(L)
(4, 'a', 'd')
4.找出元素在序列中出现的次数count()
>>> s="hello world"
>>> s.count("h"),s.count("o")
(1, 2)
5.索引取元素
S[i],i为从0开始的数值,可以取负数表示从尾部开始取。
例如:
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> L
['a', 'b', 'c', 'd']
>>> L[0]
'a'
>>> L[1]
'b'
>>> L[-1]
'd'
负数的i等价于len(S)+i
作为索引。例如,len(S) = 3, i = -1
,表示取最后一个元素,也就是index=2的元素。
6.分片
分片操作用于从序列中取出子序列,它会创建新的内存块来保存取出来的序列对象。
- S[i:j]:从索引位i取到索引位j,不包括j
- S[i:]:从索引位i开始取到最结尾
- S[:j]:从最开头取到索引位j,不包括j
- S[:]:从头取到尾,相当于拷贝了序列,但得到的是新序列
- S[i:j:k]:k表示取元素时的步进间隔,默认为1,表示每个元素都取,如果为2,则表示取一个跳过一个
分片的区间是左闭右开的,所以不会包括j的索引位。i和j可以是负数,负数表示从尾部开始计算索引位。例如,-1表示最后一个元素,-2表示倒数第二个元素。
特别地,如果i = j,则表示找到序列中的这个位置,但因为切片长度位0,所以返回空。
例如:
>>> s = "hello world"
>>> len(s)
11
>>> s[0:6]
'hello '
>>> s[:6]
'hello '
>>> s[6:10] # 不包括index=10
'worl'
>>> s[6:11] # 所以用大于10的结束位
'world'
>>> s[6:]
'world'
>>> s[6:-1]
'worl'
>>> s[:] # 拷贝序列得到副本
'hello world'
>>> s[::1] # 步进为1,默认的
'hello world'
>>> s[::2] # 每次跳过一个元素
'hlowrd'
>>> s[1:1] # 找到index=1的位置
''
7.找出第一个元素的位置index()
index(x,i,j)表示从序列中搜索元素x并返回第一次出现的x的位置,如果给定了i,则表示从索引位i开始搜索,给定了j则表示最多搜索到索引位为j的位置。
如果找不到元素,将报错。i和j可以是负数,但无论它们是正数还是负数,都是搜索的开始和结束位。
>>> s="hello world"
>>> s.index("o")
4
>>> s.index("o",1,-1)
4
>>> s.index("o",-5) # 从倒数第5个元素开始搜索
7
>>> s.index("a") # 搜索不到时报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
不可变序列的操作
相比可变序列,不可变序列的唯一操作是可以支持内置的hash()操作。可变序列无法hash()。
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> hash("asd")
-2014632507
>>> hash((1,23))
1320437575
>>> hash([1,23])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
能够hash的不可变序列,意味着能作为dict的key,能保存到set或frozenset中。
可变序列的操作
- s[i] = x、s[i:j] = t将序列中的元素替换成x或可迭代对象t
- s[i:j:K] = t将序列中的元素替换成可迭代对象t,t的长度必须和s[i:j:k]的长度一样
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!