天天看点

python list,tuple,dict,setlisttupledictset

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]

下标越界的话,会出错:

>>> 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]

>>> 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]

不可更新:

>>> 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()

>>> 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}