Python——list,tuple,dict与set

list 列表

list是一种有序的集合,可以随时添加和删除其中的元素
比如,列出班里所有同学的名字,就可以用一个list表示:

>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']

len()返回 list 长度

>>> len(classmates)
3

关于调用:从0开始,超出长度len 就会报错,可以倒序,-1为倒数第一个,一次类推,长度超过 len 也会报错

>>> classmates[0]
'Michael'
>>> classmates[1]
'Bob'
>>> classmates[2]
'Tracy'
>>> classmates[3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
_________________分割线_________________
>>> classmates[-1]
'Tracy'
>>> classmates[-2]
'Bob'
>>> classmates[-3]
'Michael'
>>> classmates[-4]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

append()从 list 尾部添加元素

>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']

insert()在指定位置插入元素

>>> classmates.insert(1, 'Jack')
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']

pop()删除指定元素:

>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']

要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:

>>> classmates[1] = 'Sarah'
>>> classmates
['Michael', 'Sarah', 'Tracy']

list元素也可以是另一个list,比如:

>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
>>> len(s)
4

要注意s只有4个元素,其中s[2]又是一个list,如果拆开写就更容易理解了:

>>> p = ['asp', 'php']
>>> s = ['python', 'java', p, 'scheme']

对于 list 里还有另一个 list 调用时可以理解为二维数组,上码可以用s[2][1]调用

tuple 元组

列表的另一种,但是已经初始化,不能被修改,相当于一个不变对象

>>> classmates = ('Michael', 'Bob', 'Tracy')

tuple 不可变的意义

不可变就意味着不能被改变,所以 tuple 更安全,如果可能,能用 tuple 就用 tuple

tuple 的陷阱:

当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来

>>> t = (1, 2)
>>> t
(1, 2)

如果要定义一个空 tuple:

>>> t = ()
>>> t
()

但是当你想定义一个只含有一个元素的 tuple 如果你这样操作

>>> t  = (1)
>>>t
1

定义的并不是 tuple,而是数字1,因为()既可以表示 tuple,也可以表示数学公式中的小括号,这就产生了歧义
Python规定,这种情况下,按小括号进行计算,计算结果自然是1
所以,定义只有一个元素的 tuple 时,我们选择这样:

>>> t = (1,)
>>> t
(1,)

最后来看一个可变的 tuple

>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

表面上看 tuple 变了,但其实变的不是tuple 元素,而是 tuple 的里的 list 的元素
tuple指向的 list 并没有变成别的 list
tuple 的不变,是指向的元素不能变,即指向 A,就不能指向B,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的
综上 tuple 内的 list 的元素是可以改变的!

dict 字典

dict 全称 dictionary, 在其他语言中称为 map ,使用键-值 (key-value)存储,具有极快的查找速度。

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:

>>> d['Adam'] = 67
>>> d['Adam']
67

一个 key 只能对应一个 value,所以当多次在一个 key 定义多个 value,后面的值会把前面的冲掉:

>>> d['Jack'] = 90
>>> d['Jack']
90
>>> d['Jack'] = 88
>>> d['Jack']
88

如果 key 不存在,就会报错。
判断一个 key 是否存在:
* 方法一

>>> 'Thomas' in d
False
  • 方法二
    通过 get()方法,若不存在,返回None或者指定的值
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1

请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。

dict的key必须是不可变对象!

原因:因为 dict 根据 key 的值来查找 value,计算 value 的位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。
要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key:

>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

set

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
要创建一个set,需要提供一个list作为输入集合:

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

注意:传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。。
set 会过滤掉重复元素

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

通过dd(key)方法可以添加元素到set中,可以重复添加,但不会有效果

>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}

通过remove(key) 删除

>>> s.remove(4)
>>> s
{1, 2, 3}

set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}

set 与 dict 的唯一区别就是 set 没有 value。
同样不能判断两个可变对象是都相等,也就无法保证set内部“不会有重复元素”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值