Python 3 Collection

1. 列表(list)

列表是用于处理有序项目的数据结构,与 Java 的数组类似,自带排序方法,可以使用 [] 进行随机访问

列表使用方括号定义,使用 len() 函数来获取列表长度

1
2
3
4
5
6
7
8
9
#!/usr/bin/python

# This is my shopping list
shoplist = ['apple', 'mango', 'carrot', 'banana']

print(len(shoplist))

olditem = shoplist[0]
del shoplist[0]

del 类似 C++ 中的 delete,用于释放一个对象。
这里使用 del 来将列表元素移除

2. 元组(tupple)

元组和列表相似,唯一的区别是元组不可改变

元组使用圆括号来定义

1
2
3
4
5
6
7
8
#!/usr/bin/python

# 圆括号是可选的,但是还是加上圆括号为好
zoo = ('python', 'elephant', 'penguin')
print('Number of annimal in the zoo is', len(zoo))

new_zoo = ('monkey', 'camel', zoo)
print('Last annimal in the zoo is', new_zoo[2][2])

注意到,元组是可以嵌套的,有点类似于 Java 中的二维数组,但并不完全相同

new_zoo[0] ==> 'monkey'
new_zoo[2] ==> zoo ==> ('python', 'elephant', 'penguin')
new_zoo[2][2] ==> zoo[2] ==> 'penguin'

含有 0 个或者 1 个元素的元组
含有 0 个元素的元组用空圆括号表示,empty = ()
含有 1 个元素的元组要在元素后面接一个逗号 singleton = (2, )

3. 字典(dict)

字典是一个键值对的表,类似于 Java 中的哈希表,一个项目具有 KeyValue

只能用不可变对象作为项目的,值则可以是可变的也可以是不可变的。

字典使用花括号定义,用冒号分隔键和值,用逗号分隔项目,使用 [] 来取值。

1
2
3
4
5
6
7
8
9
10
ab = {
'Swaroop' : '[email protected]'
'Larry' : '[email protected]'
}


print("Swaroop's address is", ab['Swaroop'])

for name, adderss in ab:
# iterate the dict

在字典中,使用来充当索引成分。
字典可以通过 items() 方法来返回键值对的列表,但是是无序的。
注意字典是没有顺序的(不能维持插入时的顺序),要使用时最好先排序。

4. 序列

列表,元组和字符串都是序列,序列具有以下特点:

  1. 支持索引操作符 [] 随机访问

    索引从 0 开始,可以支持负数
    当索引是负数时,它会抓取倒数的项目

  2. 可以采取切片操作

    即返回一个序列的子集,例如子数组等
    切片操作通过冒号完成,例如下面的 shoplist[1:3]
    切片操作的区间是左闭右开,上面返回的是 shoplist[1]shoplist[2] 组成的子列表
    假如前一个为空,切片从序列头开始,后一个为空,切片在序列尾停止。(后一个为空,最后结果包括最后一个元素shoplist[:] 返回整个列表)

    也可以使用负数作切片,此时的负数只作为一个定位元素的索引,例如 shoplist[:-1] 会在倒数第一个停止,也就是不包括最后一个元素的子列表

    也可以给切片定义第三个参数——切片的步长。其实就是切片操作在遍历数组时的步长。
    步长通过两个冒号的最后一个参数定义
    shoplist[::3] ==> shoplist[0], shoplist[3], shoplist[6]...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Indexing or 'Subscription' operation
print('Item 0 is', shoplist[0])
print('Item 1 is', shoplist[1])
print('Item 2 is', shoplist[2])
print('Item 3 is', shoplist[3])
print('Item -1 is', shoplist[-1])
print('Item -2 is', shoplist[-2])
print('Character 0 is', name[0])

# Slicing on a list
print('Item 1 to 3 is', shoplist[1:3])
print('Item 2 to end is', shoplist[2:])
print('Item 1 to -1 is', shoplist[1:-1])
print('Item start to end is', shoplist[:])

# Slicing on a string
print('characters 1 to 3 is', name[1:3])
print('characters 2 to end is', name[2:])
print('characters 1 to -1 is', name[1:-1])
print('characters start to end is', name[:])

5. 集合

集合是无顺序的简单对象的聚集。

使用集合,可以检查是否是成员是否是另一个集合的子集得到两个集合的交集

1
2
3
4
5
6
7
8
9
10
11
>>> bri = set(['brazil', 'russia', 'india'])
>>> 'india' in bri
True
>>> 'usa' in bri
False
>>> bric = bri.copy() >>> bric.add('china')
>>> bric.issuperset(bri)
True
>>> bri.remove('russia')
>>> bri & bric # OR bri.intersection(bric)
{'brazil', 'india'}

6. 引用

这个概念和 Java 中的引用相同。

注意切片操作可以对一个序列进行深拷贝(deep copy)