python 列表和元组、字典

列表

>>> a = [1,2,3,4,5]
>>> a[0] #第一个元素
1
>>> a[-1] #倒数第一个元素
5 
>>> a[0:4] # 从0到4下标所对应的元素
[1, 2, 3, 4]
>>> a[:-1] # 从0到倒数第一之前的元素
[1, 2, 3, 4]
>>> a[0:] # 从1到最后的元素
[1, 2, 3, 4, 5]
>>> a[0:5:2] # 从0到5 每2个元素为间隔
[1, 3, 5]

1.拷贝

>>> a_ref = a # 引用 a
>>> a[2] = 100
>>> a
[1, 2, 100, 4, 5]
>>> a_copy = a[:] # 拷贝
>>> a
[1, 2, 100, 4, 5]

2.追加

>>> a.append(300)
>>> a
[1, 2, 100, 4, 5, 300]

3.在下标1的位置插入50

>>> a.insert(1,50)
>>> a
[1, 50, 2, 100, 4, 5, 300]

4.排序

>>> a.sort()
>>> a
[1, 2, 4, 5, 50, 100, 300]

5.逆行排序

>>> a.reverse()
>>> a
[300, 100, 50, 5, 4, 2, 1]

6.引用

上面我们定义了 a_ref,虽然我们一直是对 a 进行操作,但是发现到这里打印的值都是一样的,因为他们引用的都是同一个地址空间

>>> a
[300, 100, 50, 5, 4, 2, 1]
>>> a_ref
[300, 100, 50, 5, 4, 2, 1] 

但是我们输出 a 的 copy 还是最开始的,没有变的

>>> a_cppy
[1, 2, 100, 4, 5]

7.查看地址

>>> b = [a,a_ref,a_copy]
>>> b
[[300, 100, 50, 5, 4, 2, 1], [300, 100, 50, 5, 4, 2, 1], [300, 100, 50, 5, 4, 2, 1]]
>>> id(a)
4328794880
>>> id(a_ref)
4328794880
>>> id(a_copy)
4328795168

发现 a 和 a_ref的 id 都是一样的,而 copy 不一样。

8.加法

>>> a+[100,200]
[300, 100, 50, 5, 4, 2, 1, 100, 200]
>>>

9.乘法

>>> d=a*2
>>> d
[300, 100, 50, 5, 4, 2, 1, 300, 100, 50, 5, 4, 2, 1]
>>> a[0]=50
>>> a
[50, 100, 50, 5, 4, 2, 1]
>>> d
[300, 100, 50, 5, 4, 2, 1, 300, 100, 50, 5, 4, 2, 1]

发现乘以后 a 的值变了 而 d 的没变,d 不是引用

10.字符串、数字都是常量,一旦赋值不能改变

>>> s = 'abc'
>>> s[0] = 'c'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>>

元组

元组用括号表示

>>> a = (1,2,3)
>>> a
(1, 2, 3)

元组可以追加

>>> a+(1,2)
(1, 2, 3, 1, 2)

元组一旦赋值不能更改

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

字典

字典(dict)是一个关键词和值对应的数据结构 key-value

>>> d = {"zhangsna":14,"lici":20}
>>> d
{'lici': 20, 'zhangsna': 14}

访问字典

>>> a = {"kuzan": {"bucket": "file201503","meta": {"props": {"domains": ["file201503.b0.upaiyun.com"]}}

>>> a['kuzan']['bucket']
'file201503'

>>> a['kuzan']['meta']['props']['domains'][0]
'file201503.com'