列表、元组、字典均是 Python 中基础数据类型。

  • 列表操作
  • 元组操作
  • 字典操作

接下来介绍 python 里面另外三种常见类型:tuple、list、dict。

list

列表是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。

序列都可以进行的操作包括索引,切片,加,乘,检查成员。

此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。

列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。

列表的数据项不需要具有相同的类型

list 创建

创建列表有 2 中方式:一是使用字面量,二是使用 list 方法

使用字面量创建

In[1]:  
L = []
print(L)
L = [1,2,3]
print(L)
L = ['a','b',100]
print(L)
执行结果:
使用 list 方法创建
In[2]:  
L = list('spam')
L
执行结果:

list 访问

直接使用下表访问

In[3]:  
L = list('spam')
L[1], L[1:3]
执行结果:
循环输出
In[4]:  
for x in L: print(x)
执行结果:
判断一个值是否在列表中
In[5]:  
3 in L, 'p' in L
执行结果:

list 操作

获取列表长度

In[6]:  
len([1,2,3,4])
执行结果:
列表拼接
In[7]:  
[1,2,3] + [4,5,6]
执行结果:
重复列表中所有元素
In[8]:  
['Ni!', 'You'] * 4
执行结果:
列表和字符串之间的转换操作
In[9]:  
str([1,2]) + "34"
执行结果:
In[10]:  
[1,2]+list("34")
执行结果:

迭代生产新列表

In[11]:  
res = [c*4 for c in 'SPAM']
res
执行结果:
In[12]:  
res = []
for c in 'SPAM':
    res.append(c*4)
    
res
执行结果:
In[13]:  
list(map(abs,[-1,-2,0,1,2]))
执行结果:

索引、切片、多维

In[14]:  
matrix = [
    [1,2,3],
    [4,5,6],
    [7,8,9]
]

matrix
执行结果:
In[15]:  
matrix[1]
执行结果:
In[16]:  
matrix[1][1]
执行结果:

改变元素

In[17]:  
L = [1,2,3]
L
执行结果:
In[18]:  
L[1] = 0
L
执行结果:
In[19]:  
L[1:2] = [4,5]
L
执行结果:
In[20]:  
L[1:1] = [6,7]
L
执行结果:
In[21]:  
L[1:2] = []
L
执行结果:
del 关键字删除
In[22]:  
L = ['spam', 'eggs', 'ham', 'toast']
L
执行结果:
In[23]:  
del L[0]
L
执行结果:
In[24]:  
del L[1:]
L
执行结果:

排序

In[25]:  
L = ['eat', 'more', 'SPAM!']
L
执行结果:
In[26]:  
L.sort()
L
执行结果:
In[27]:  
L.sort(key=str.lower)
L
执行结果:
In[28]:  
L.sort(key=str.lower, reverse=True)
L
执行结果:
还可以使用内置 sorted 函数进行排序,只是 sorted 函数不会改变原有 list 对象,会返回一个新的 list 对象
In[29]:  
Ls=[3,4,2]
In[30]:  
sorted(Ls), Ls
执行结果:
list 还有其他常用操作方法,请使用 dir 和 help 进行查看学习。例如:dir([])

tuple

在 python 有一个和 list 很相似的数据结构:tuple。他们支持的访问操作几乎相同,一个本质的却别就是:

tuple 不可修改,list 可以修改

元组使用小括号,列表使用方括号

由于 tuple 不可变性,所以 list 中一切可能改变内容的操作 tuple 都没有,其他访问操作方式完全一下,当然返回的数据类型是 tuple

In[31]:  
t = ('eat', 'more', 'SPAM!')
t
执行结果:
In[32]:  
t1 = 'a','b','c'
t1
执行结果:
In[33]:  
t[0]
执行结果:
In[34]:  
t[1:]
执行结果:
In[35]:  
(1,2) + (3,4)
执行结果:
In[36]:  
(1,2,3) * 4
执行结果:
In[37]:  
sorted(t)
执行结果:

命名 tuple

以上元组的访问是通过索引访问,这个有时候是不方便的。这个时候我们就需要使用命名元组。

In[38]:  
from collections import namedtuple

Student = namedtuple('Student', ['name', 'age', 'sex', 'email'])
s = Student('Jim', 21, 'male', '123@qq.com')
print(Student)
print(s)
print(s.age)
执行结果:

dict

字典是另一种可变容器模型,且可存储任意类型对象。

In[39]:  
# 字典创建
In[40]:  
D = {'spam':2, 'ham': 1, 'eggs': 3}
D
执行结果:
In[41]:  
# 其他方式创建
D1 = {}
D1['spam'] = 2
D1['ham'] = 1
D1['eggs'] = 3
D
执行结果:
In[42]:  
D2 = dict(spam=2, ham=1, eggs=3)
D2
执行结果:
In[43]:  
D3 = dict([('spam',2),('eggs',3),('ham', 1)])
D3
执行结果:
In[44]:  
D4 = dict.fromkeys(['a','b','c'],0)
D4
执行结果:
In[45]:  
D5 = {x:x**2 for x in range(5)}
D5
执行结果:
In[46]:  
D6 = dict(zip(['a','b','c'],[1,2,3]))
D6
执行结果:
In[47]:  
D['ham']
执行结果:
字段操作
In[48]:  
D = {'spam':2, 'ham': 1, 'eggs': 3}

len(D)
执行结果:
In[49]:  
判断是否包含某个 key。注意:不能使用这样判断某个值是否存在。
执行结果:
In[50]:  
'ham' in D
执行结果:
In[51]:  
2 in D
执行结果:
获取字段数据
In[52]:  
D = {'spam':2, 'ham': 1, 'eggs': 3}
D['eggs']
执行结果:
In[53]:  
D.get('spam')
执行结果:

当使用 [] 方式获取值时,如果字典不包含 key 时,会产生异常。

使用 get 方法获取值时,如果字典不包含 key 时,会返回 None

可以给 get 方法传入一个默认值,如果字典不包含 key 时,会返回传入的默认值。

In[54]:  
D['toast']
执行结果:
In[55]:  
D.get('toast'), D.get('toast', 88)
执行结果:
当使用一个不存在的 key 是会发生错误时,可以使用如下方式处理

  1. 使用 if 判断来避免错误
  2. 使用 try 对异常进行捕获
In[56]:  

if (2,4,6) in DM:
    print(DM[(2,4,6)])
else:
    print(0)
执行结果:
In[57]:  
try:
    print(DM[(2,4,6)])
except KeyError:
    print(0)
执行结果:
返回所有的 key 或 value
In[58]:  
list(D.keys())
执行结果:
In[59]:  
D.values(), list(D.values())
执行结果:
In[60]:  
print(D.items())
print(list(D.items()))
执行结果:
字典修改
In[61]:  
D['ham'] = ['grill', 'bake', 'fry']
D
执行结果:
In[62]:  
del D['eggs']
D
执行结果:
In[63]:  
D['bb'] = 'bbbb'
D
执行结果:
In[64]:  
print(D)
D2 = {'bb':'b2b2','a':'aa'}
D.update(D2)
print(D)
执行结果:
In[65]:  
print(D)
D.pop('ham')
print(D)
执行结果:
** 对于字典的 key 不要求必须是字符串类型,人也一种不可变对象类型都可以作为 key。比如我们可以使用 tuple **
In[66]:  
DM = {}
DM[(1,2,3)] = 88
DM[(4,5,6)] = 99
DM
执行结果:
In[67]:  
l = tuple([4,5,6])
DM[l]
执行结果:

排序输出

dict 是 hash 存储,本身没有顺序,也不能进行排序。但是可以将 keys() 函数返回的所有 key 转换成 list,然后排序输出

In[68]:  
D
执行结果:
In[69]:  
ks = D.keys()
for k in sorted(ks):
    print(k, D[k])
执行结果: