Python序列类型 list[] tuple()

序列类型–list[] tuple()

上一节讲解的字符串类型,可以通过slice切片、索引index来取字符串中的内容。这一小节我们深入了解一下序列类型
序列是指:列表、元组、字符串这3个类型,与字符串一样,序列的2个主要特点就是索引操作符和切片操作符。
索引操作符让我们可以从序列中抓取一个特定item;切片操作符让我们能够获取序列的一个切片,即一部分序列。

序列
索引同样可以是负数,位置是从序列尾部开始计算的。因此,shoplist[-1]表示序列的最后一个元素而shoplist[-2]抓取序列的倒数第二个item;

切片操作符中[begin:end:steps]的第一个数表示切片split开始位置,end表示切片结束位置,如果不指定则分别表示首部、尾部,step=1。
str[:] 返回整个序列的拷贝,用负数做split,负数用在从序列尾部开始计算的位置,例如str[:-1]返回除了最后一个item外包含所有item的序列切片。
注意切片是含首不含尾即[begin, end),只要是序列(列表,元组,字符串)索引取数据都是[index]方括号

序列的基本操作;

len()	求序列长度,注意Python中字符串类型'没有附带结束符',这是求的实际元素的长度,如`>>> len("hello_world")=11`,这是与其他语言区别

+	连接两个序列
*   重复序列元素,重复次数
in  判断元素是否在序列中,成员属性
max(), min()  返回最大,最小值
cmp(tuple1,tuple2) 比较2个序列值是否相同

>>> str2="hello_"*5
>>> str2
'hello_hello_hello_hello_hello_'
>>>

元组的特性

1.可以向其中存储多种不同的数据类型(与list[]一致),如int,字符串,float: >>>zoo=(‘wolf’,‘elephent’,23,3.5)
2.元组对象不可改变,与字符串类似,当元组变量被重新赋值后,id()就变了, 试图通过index修改tuple会报错

创建元组


空元组>>>emptystr=(), t2 = tuple()
list >>> list1 = [],  list2 = list(), # 类似的 d1 = dict(), s1 = set()
单元素元组>>> singlestr=(2,)

>>> zoo=('wolf','elephent',23,3.5)
>>> zoo
('wolf', 'elephent', 23, 3.5)
>>> id(zoo)
51346392
>>> zoo=('wolf3','elephent2',23,3.5)
>>> zoo
('wolf3', 'elephent2', 23, 3.5)
>>> id(zoo)
48647768
>>> 
>>> zoo
('wolf3', 'elephent2', 23, 3.5)
>>> zoo[1]='lala'
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    zoo[1]='lala'
TypeError: 'tuple' object does not support item assignment
>>> zoo[1]
'elephent2'
>>> 不支持更改,实际上就在内存中重新开辟了空间存储新数据,而不是在原内存上修改

常用元组来给一组变量赋值

 >>> a,b,c=(1,2,3)
>>> a
1
>>> b
2
>>> c
3
>>> d,e,f,g=zoo
>>> d
'wolf3'
>>> e
'elephent2'
>>> f
23
>>> 

列表list[]中的item值随意更改

>>> list3
['Simon', 'David', 12, 23.5]
>>> id(list3)
3530184
>>> list3[0]
'Simon'
>>> list3[0]="Hello"
>>> list3
['Hello', 'David', 12, 23.5]
>>> id(list3)
3530184
>>> 更改后id不变,是在原内存空间修改值,而非新创建

字典dict{}

3类不可变对象—数字、字符串、元组

字典是Python中唯一的映射类型(哈希表hashtable),字典是无序的。
字典对象时可变的,但是字典的键key必须使用不可变对象,并且一个字典中可以使用不同类型的键值key(混合使用数字,字符串等)
keys()或者values()返回key list列表或values list列表
items() 返回包含键值对key-value的元组

keys就相当于其他数据类型中的索引index,同样获取value只能凭key。

>>> dict1={'name':'milo','age':25,'gender':'male'}
>>> dict1
{'name': 'milo', 'age': 25, 'gender': 'male'}
>>> type(dict1)
<class 'dict'>
>>> dict1['name']
'milo'
>>> dict1.keys()
dict_keys(['name', 'age', 'gender'])
>>> dict1.values()
dict_values(['milo', 25, 'male'])

case2
>>> name='xixi'
>>> dict2={1:'123',2:234,name:'milo','age':25,'gender':'female'}	#key可以用变量,参考dict2中name
>>> dict2[name]
'milo'
>>> dict2['xixi']
'milo'

访问dict{}字典中的值

 直接使用key访问:key不存在会报错,可以使用(not)in判断
 循环遍历:for key in dict2.keys():
 使用迭代器:for key in dict2:
 使用迭代器:for key,value in dict2.items():

字典更新update,向其添加insert new新的key-value可以直接类似访问字典的方式,而且是无序的,再次表明dict的无序性

>>> dict1
{'name': 'milo', 'age': 25, 'gender': 'male'}
>>> dict1['tel']='13817108096'
>>> dict1
{'name': 'milo', 'age': 25, 'gender': 'male', 'tel': '13817108096'}
>>> 
>>> dict1['tel']='110110'
>>> dict1
{'name': 'milo', 'age': 25, 'gender': 'male', 'tel': '110110'}
>>> dict1['circle']='python'
>>> dict1
{'name': 'milo', 'age': 25, 'gender': 'male', 'tel': '110110', 'circle': 'python'}
>>> 

del dict1['key']删除字典中key对应的键值对

case
 >>> dict1
{'name': 'milo', 'age': 25, 'gender': 'male', 'tel': '110110', 'circle': 'python'}
>>> del dict1['circle']
>>> dict1
{'name': 'milo', 'age': 25, 'gender': 'male', 'tel': '110110'}
>>> dict1.pop('age')
25
>>> dict1
{'name': 'milo', 'gender': 'male', 'tel': '110110'}

dict1.pop(key)删除并且返回key的value
dict1.clear()删除字典所有元素
del dict1 删除整个字典

字典{}
Len(),hash()(用于判断某个对象是否可以做字典的键,非哈希类型报TypeError错误)
dict.clear():删除字典中的所有元紊
dict.fromkeys(seq,val=None):以seq中的元素为key创建并返回一个dict字典,val为指定的默认值
dict.get(kev,default=None):返回key的value,如果该键不存在返回default指定的值
dict.has_key(key):判断字典中是否存在key,建议使用innot in代替
dict.items():返回键值对元组的列表.
dict.keys():返回字典中键的列表.
dict.iter*():iteritems(),iterkeys(),itervalues()返回迭代子而不是列表
dict.update(dict2):将dictZ中的键值对添加到字典dict中,如果有重复搜盖,原字典不存在的条目添加进
dict.values():返回字典中所有值的列表。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章