python list,tuple,dict,set

list

list是可变有序元素集合,通过方括号定义,例如:

list_t=[0,1,2,3,4]

>>> list_t
[0, 1, 2, 3, 4]

>>> isinstance(list_t,list)
True

list

list长途通过len()函数获取:

>>> len(list_t)
5
list通过下标获取单个元素,注意下标从0开始:

>>> list_t[0]
0

下标越界的话,会出错:

>>> list_t[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

可以通过-1下标获取倒数第一个元素,-2倒数第二个元素,依次类推:

>>> list_t[-1]
4
>>> list_t[-5]
0
>>> list_t[-6]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

pop从指定位置获取,并删除元素:

>>> list_t.pop(1)
1
>>> list_t
[0, 2, 3, 4]

insert在指定位置插入数据:

>>> list_t.insert(1,1)
>>> list_t
[0, 1, 2, 3, 4]

指定超过list长度的位置插入,默认在list的末尾插入:

>>> list_t.insert(10,10)
>>> list_t
[0, 1, 2, 3, 4, 10]

覆盖更新指定位置:

>>> list_t[1]=10
>>> list_t
[0, 10, 2, 3, 4]

list中的元素也可以是list:

>>> list_t=[0,[1,2,3],4,5]
>>> list_t
[0, [1, 2, 3], 4, 5]
>>> isinstance(list_t,list)
True

同样通过下标访问:

>>> list_t[1]
[1, 2, 3]
>>> list_t[1][0]
1

tuple

tuple是不可变的元素集合。不可变体现在2个方面:元素个数不变,元素内容不变。

tuple通过小括号定义:

>>> tuple_t=(0,1,2)
>>> tuple_t
(0, 1, 2)
>>> isinstance(tuple_t,tuple)
True

通过元素下标访问,下标从0开始:

>>> tuple_t[0]
0

不可更新:

>>> tuple_t[1]=10
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

定义一个元素时,需要在元素后加上逗号,以表明是定义一个tuple,而不是小括号对:

>>> tuple_t=(0,)
>>> isinstance(tuple_t,tuple)
True
>>> tuple_t=(0)
>>> isinstance(tuple_t,tuple)
False

理解元素的不变性:

>>> p=[0,1,2]
>>> tuple_t=(3,p,4)
>>> tuple_t
(3, [0, 1, 2], 4)
>>> tuple_t[1][0]=10
>>> tuple_t
(3, [10, 1, 2], 4)
>>> isinstance(tuple_t,tuple)
True
这里通过tuple_t[1][0]对p[0]进行赋值,改变了p[0]的值。但是tuple_t[1]的值本身并没有改变。可以理解为tuple_t[1]存储的是对象的指针。这个指针指向了p。指针没有变,仅仅是指针指向的内容发生了变化。

可以定义空的tuple,虽然看不出有什么意义:

>>> tuple_t=()
>>> tuple_t
()
>>> isinstance(tuple_t,tuple)
True

dict

dict存储key:value形式的键值对,写入顺序与存储顺序不一定相同。检索性能优秀,是对key进行hash以确定value的存储地址,快速的找到value值。内存占用大,属于以空间换时间。存取自由,与list相反,如果在list中间插入数据的话,可想要将其后的元素都往后挪一位耗费巨大。

使用花括号定义:
>>> dict_t={'key1':'value1','key2':'value2'}
>>> dict_t
{'key2': 'value2', 'key1': 'value1'}
>>> isinstance(dict_t,dict)
True

key需要使用不变值,注意下面的定义,已经将key1转为对应的string作为key存储。顺便注意下输入顺序与存储顺序不同:

>>> key1='mk1'
>>> dict_t={key1:'value1','key2':'value2'}
>>> dict_t
{'key2': 'value2', 'mk1': 'value1'}

使用key获取元素value

>>> dict_t[key1]
'value1'
>>> dict_t['mk1']
'value1'

使用key复制以及新增:

>>> dict_t['key2']='v2'
>>> dict_t['key3']='v3'
>>> dict_t
{'key2': 'v2', 'key3': 'v3', 'mk1': 'value1'}

for循环获取全部值:

>>> for k in dict_t:
...     print("%s:%s" % (k,dict_t[k]))
...
key2:v2
mk1:value1
key3:v3

使用pop()获取一个key时,并删除:

>>> dict_t.pop('key2')
'v2'
>>> dict_t
{'mk1': 'value1', 'key3': 'v3'}

获取不存在的key时,会报错。为避免出错,可在获取时,先用in进行校验,或者通过get()方法返回空或默认值:

>>> dict_t['key2']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'key2'
>>> 'key2' in dict_t
False
>>> dict_t.get('key3')
'v3'
>>> dict_t.get('key2',-1)
-1
>>> dict_t.get('key2')
>>>

set

set只保存key,并且key不能重复。定义时需要输入list参数:

>>> set_t=set([0,1,2,3])
>>> set_t
{0, 1, 2, 3}

但是set不能通过下标访问,这是因为set是与dict本质上相同的,并不是按照输入顺序存储的数组,是按照key大小排列的。

>>> set_t[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing

通过add方法添加可以,remove()方法删除

>>> set_t.add(4)
>>> set_t
{0, 1, 2, 3, 4}
>>> set_t.remove(0)
>>> set_t
{1, 2, 3, 4}

pop方法删除队首一个元素:

>>> set_t=set([5,0,7,2])
>>> set_t.pop()
0
>>> set_t
{2, 5, 7}

两个set可以做交并差:
>>> set_t
{2, 5, 7}
>>> set_t1=set([3,6,7])
>>> set_t - set_t1
{2, 5}
>>> set_t & set_t1
{7}
>>> set_t | set_t1
{2, 3, 5, 6, 7}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值