当前位置:   article > 正文

python中的sequence(序列)_python sequence

python sequence

【附注信息  ----> 关注公众号:CS阿吉,大家一起分享更多的技术文章,聊天技术问题。】

 

数据类型:sequence (序列)

1. sequence(序列)是一组有顺序元素集合

(严格的说,是对象的集合,但鉴于我们还没有引入“对象”概念,暂时说元素)

序列可以包含一个或多个元素,也可以是一个没有任何元素的空序列

元素可以是我们之前所说的基本数据类型,可以是另一个序列,还可以是我们以后介绍的其他对象。

序列有两种:tuple(定值表; 也有翻译为元组) 和 list ()

>>>s1 = (2, 1.3, 'love', 5.6, 9, 12, False) # s1是一个tuple

>>>s2 = [True, 5, 'smile']# s2是一个list

>>>print s1,type(s1)

>>>print s2,type(s2)

tuple和list的主要区别在于,一旦建立,tuple的各个元素不可再变更,而list的各个元素可以再变更

一个序列作为另一个序列的元素

>>>s3 = [1,[3,4,5]]

空序列

>>>s4 = []

 

2. 序列元素的引用:

序列元素的下标从0开始:

>>>print s1[0]

>>>print s2[2]

>>>print s3[1][2]

由于list的元素可变更,你可以对list的某个元素赋值:

>>>s2[1] = 3.0

>>>print s2

如果你对tuple做这样的操作,会得到错误提示。

所以,可以看到,序列的引用通过s[<int>]实现, int为下标

3)其他的引用方式:

范围引用: 基本样式[下限:上限:步长]

>>>print s1[:5] # 从开始到下标4 (下标5的元素 不包括在内)

>>>print s1[2:]# 从下标2到最后

>>>print s1[0:5:2]# 从下标0到下标4 (下标5不包括在内),每隔2取一个元素 (下标为0,2,4的元素)

>>>print s1[2:0:-1]# 从下标2到下标1

从上面可以看到,在范围引用的时候,如果写明上限,那么这个上限本身不包括在内

尾部元素引用

>>>print s1[-1]# 序列最后一个元素

>>>print s1[-3]# 序列倒数第三个元素

同样,如果s1[0:-1], 那么最后一个元素不会被引用 (再一次,不包括上限元素本身

4) 字符串是一种tuple

因此也就可以做tuple可以进行的操作

>>>str = 'abcdef'

>>>print str[2:4]

 

总结:

tuple元素不可变,list元素可变

序列的引用 s[2], s[1:8:2]

字符串是一种tuple

 

来测试一下python中的序列

 

[python]  view plain  copy
 
 
  1. seq='hello world!'#这是一个tuple  
  2. seq1=[1,1.3,True,'hello',[1,1.2,True,'xxx']]#list嵌套  
  3. seq2=(1,1.3,True,'hello',[1,1.2,True,'xxx'])#tuple中嵌套list  
  4. seq3=[1,1.3,True,'hello',(1,1.2,True,'xxx')]#list中嵌套tuple  
  5. seq4=(1,1.3,True,'hello',(1,1.2,True,'xxx'))#tuple嵌套  


1.python中的序列中竟然可以含有不同类型的元素,c++中的数组、vector、list、deque、set、map的容器都做不到这一点。

 

2.python中的序列可以方便的取值

 

[python]  view plain  copy
 
 
  1. ##有关取值操作符  
  2.   
  3. print("seq[2]=%s\nseq1[4]=%s\nseq2[4]=%s\nseq3[4]=%s\n"%(seq[2],seq1[4],seq2[4],seq3[4]))  
  4. ##seq[m,n]输出的只有m到n-1。相当于是个半开半闭区间  
  5.   
  6. print("seq[2:4]=%s\nseq1[2:4]=%s\nseq2[2:4]=%s\nseq3[2:4]=%s\n"%(seq[2:4],seq1[2:4],seq2[2:4],seq3[2:4]))  


输出:

 

>>> ================================ RESTART ================================
>>> 
seq[2]=l
seq1[4]=[1, 1.2, True, 'xxx']
seq2[4]=[1, 1.2, True, 'xxx']
seq3[4]=(1, 1.2, True, 'xxx')


seq[2:4]=ll
seq1[2:4]=[True, 'hello']
seq2[2:4]=(True, 'hello')
seq3[2:4]=[True, 'hello']

 

3.tuple和list的主要区别在于,一旦建立,tuple的各个元素不可再变更,而list的各个元素可以再变更。

 

[python]  view plain  copy
 
 
  1. #seq算是一个tuple。如果要修改里面的元素值,例如seq[2]='x'  
  2.   
  3. ''''' 
  4. 很悲惨的出现下面的错误 
  5. Traceback (most recent call last): 
  6.   File "J:\pythonexercise\seq.py", line 15, in <module> 
  7.     seq[2]='x' 
  8. TypeError: 'str' object does not support item assignment 
  9.  
  10. '''  
  11. #seq1算是一个list。元素是可以修改的  
  12. seq1[0]='I can change the cell in list'  
  13. seq1[4]='change list to string'  
  14.   
  15. print seq1  
  16.   
  17. 输出为  
  18. ['I can change the cell in list'1.3True'hello''change list to string']  
  19.   
  20. #seq2是一个tuple,所以它不能被修改  
  21. #seq2[0]='I can change the cell in list'  
  22. ''''' 
  23. 很悲惨的出现下面的错误 
  24. Traceback (most recent call last): 
  25.   File "J:\pythonexercise\seq.py", line 33, in <module> 
  26.     seq2[0]='I can change the cell in list' 
  27. TypeError: 'tuple' object does not support item assignment 
  28. '''  
  29. ##但是下面这句话竟然执行成功了。seq2[4]是一个list。所以seq2[4]中的元素可以被修改。  
  30. ##这就比较蛋疼了,tuple不能被修改,但是tuple中嵌套的list可以被修改。⊙﹏⊙b汗!  
  31. seq2[4][2]='change list to string'  
  32. print seq2  

4.tuple也不是那么不可变

>>> t1=(1,'zzzz')
>>> t2=[1,'zzzaaa']
>>> t1=t1+(1.23,True,[0,1])
>>> t1
(1, 'zzzz', 1.23, True, [0, 1])
>>> t1=t1+t2


Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    t1=t1+t2
TypeError: can only concatenate tuple (not "list") to tuple
>>> t2=t2+[1.23,True,[0,1]]
>>> t2
[1, 'zzzaaa', 1.23, True, [0, 1]]
>>> 

可以看到,list和tuple不能连接。tuple在连接操作后值变化了

>>> t1=(1,'zzzz')
>>> t1=t1*2
>>> t1
(1, 'zzzz', 1, 'zzzz')

对于*重复操作符也可以修改tuple的值。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/761032
推荐阅读
相关标签
  

闽ICP备14008679号