我与Py的那些事——list与tuple

Posted by Csming on 2017-04-15

list

list是Python内置的数据类型;是一种有序的集合,可以随时添加和删除其中的元素

1
2
3
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
# ['Michael', 'Bob', 'Tracy']

那么classmates就是一个list;
可以使用len()函数获得list元素的个数

可以利用索引访问list中每一个位置的元素

1
classmates[0]

当然不可以超出索引;

我觉得还有一个很有趣的特性,就是可以使用负数当索引
-1、-2、-3等;但是不可以超出数组范围

  • append()函数可以在list中追加元素到末尾
  • insert()函数可以将元素插入到指定的位置
  • pop()函数可以删除末尾的元素
  • pop(i)函数可以删除指定位置的元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']

# ------------------------------------

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

# ---------------------------------------

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

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

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

1
classmates[1] = 'Sarah'

  • list里面的元素的数据类型也可以不同:
1
L = ['Apple',123,True]
  • list的元素也可以是另一个list
1
2
3
4
5
s = ['python', 'java', ['asp', 'php'], 'scheme']

# ----等价于------
p = ['asp', 'php']
s = ['python', 'java', p, 'scheme']

list中也可以一个元素都没有,即为空;

1
L = []

tuple

tuple与list类似,但是tuple初始化后不能修改;

eg:

1
classmates = ('Michael', 'Bob', 'Tracy')
  • 初始化后,这个tuple就不能修改了

  • 不存在append()、insert()这样的方法;

  • 而获取元素的方法和list是一样的,也可定义为空()

  • tuple由于不可变,所以代码更安全

  • 要定义只有一个元素的tuple,必须加一个逗号

1
2
t = (1, )
# 避免混乱

当然,tuple中的list里面的内容是可以改变的;因为,tuple中的list元素指向的是一个list内存单元是不可变的;而list的内容是可变的


dict

dict即dictionary;(在Java中类似为map)利用键值对存储,具有极快的查找速度;

1
2
3
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
print(d['Michael'])
# 95

把数据放入dict的方法,除了初始化时指定外,还可以通过key放入
一个key只能对应一个value,多次对一个key放入value,后面的值会把前面的值冲掉
如果key不存在,dict就会报错

1
2
3
d['Adam'] = 67
print(d['Adam'])
# 67
  • **要避免key不存在的错误,有两种方式,一是通过in判断key是否存在,不存在则返回False;二是通过dict提供的get方法,key不存在则返回None,或者自己指定的value;

  • 要删除一个key,用pop(key)方法,对应的value也会删除;

1
2
3
4
d.pop('Bob')
# 返回75
print(d)
{'Michael': 95, 'Tracy': 85}

set

set存储不重复的元素

创建时需提供一个list作为输入集合;并且会自动过滤重复元素

1
2
3
s = set([1, 1, 2, 2, 3, 3])
print(s)
# {1, 2, 3}
  • add(key) 添加元素到set中

  • remove(key) 删除元素

  • 此外可以将set看成集合,逼格可以使用并交叉集合运算

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

参考资料:http://www.liaoxuefeng.com/