1. Tuples
tuples和lists很相似,但是它们的元素是固定的,一旦一个tuple被创建,那么就不能执行添加元素、删除元素、修改元素、或者对元素进行排序等操作(但注意可以对一个tuple重新赋值)。看到这里,不禁会疑问,既然tuple什么都不能做,干嘛还要用它,tuple的存在可能基于两个原因:1)在python中,它比list操作速度更快,如果我们定义一个常量集,不需要修改,只需要遍历,则最好用tuple;2)安全性:由于tuple不能进行修改,那么对于这种类型的数据,tuple可以避免数据被偶然修改。
tuple用()创建,可以直接创建,如t1 = (1,3,5); 也可以从list创建,如t2 = tuple([2 * x for x in range(1,5)]); 另外还可以从string创建,如t3 = tuple("abcd") # t3: ('a','b','c','d')。
同时tuple也可以进行len(),max(),min(),sum(),index(),slicing等操作。如下所示:
tuple1 = ("green","red","blue")
tuple2 = tuple([7,1,2,23,4,5])
print (len(tuple2)) # 6
print (max(tuple2)) # 23
print (min(tuple2)) # 1
print (sum(tuple2)) # 42
print (tuple2[0]) # 7
tuple3 = 2 * tuple1
print (tuple3) # ('green', 'red', 'blue', 'green', 'red', 'blue')
print (tuple2[2:4]) # (2, 23)
print (tuple1[-1]) # blue
for v in tuple1:
print (v,end=' ') # green red blue
print ()
print (tuple1==tuple2) # False
2. Sets
Set和list也有相似之处,可以用来存储数据,但和list有三点不同:1)set中无重复元组,这可以用来做很多事情,如在decision tree的程序中,用来取某一属性上的所有值,则可以在取得属性上值的list后,做set(list)操作,则去除了重复值; 2)set和list与tuple不同,它是无序的,所以如果你所需要存储的数据不需要顺序,则用set会比list要高效。3)另外,set中的元素必须是可hash的,而list却没有这个要求,目前为止除了list,其它类型都是必须可hash的。
set的创建用{}表示,也可以用set()构造函数创建,如set1 = {1,3,5}; set2 = set([2*x for x in range(1,5)]); set3 = set("abcd")。
set的操作函数:
add(e):添加一个元素e;
remove(e):删除一个元素e;
max(),min(),len(),sum():常用的几种操作;
s1.issubset(s2):判断s1是否是s2的子集;
s1.issuperset(s2):判断s1是否是s2的父集;
==,!=:判断两集合是否相同;
<, <=, >, >=:判断子集与父集;
s1.union(s2)或者|:两集合的并;
s1.intersection(s2)或者&:两集合的交;
s1.difference(s2)或者-:两集合的差。
s1.symmetric_difference(s2)或者^:两集合的异或。
下面对上面的函数举个小例子:
s1 = {1,2,4}
s1.add(6)
print (s1) # {1,2,4,6}
print (len(s1)) # 4
print (max(s1)) # 6
print (min(s1)) # 1
print (sum(s1)) # 13
print (3 in s1) # False
s1.remove(4)
print (s1) # {1,2,6}
s1 = {1,2,4}
s2 = {1,4,5,2,6}
print (s1.issubset(s2)) # True
print (s2.issuperset(s1)) # True
print (s1==s2) # False
print (s1<=s2) # True
print (s1.union(s2)) # {1,2,4,5,6}
print (s1|s2) # {1,2,4,5,6}
print (s1.intersection(s2))# {1,2,4}
print (s1&s2) # {1,2,4}
print (s1.difference(s2)) # set()
print (s1-s2) # set()
print (s1.symmetric_difference(s2)) # {5,6}
print (s1^s2) # {5,6}
set 在in 和not in以及在remove()操作上比list要高效。
3. Dictionary
dictionary是采用键值对来对数据进行存储,它可以很快的实现基于key的检索,删除,更新等操作。key很像索引,也必须是可hash的。并且,dictionary中不能包含相同的key值。
dictionary的创建也是用{},和set相同,所以,默认情况下,我们创建set的时候采用set(),而把{}留给dictionary,比如student={},我们可以默认是创建dictionary的;创建的例子:
students = {"111-58-5858": "John", "132-59-5959": "Peter"}
dictionary的一些函数操作:
add : 可以用dictionaryName[key] = value来操作; 如果这个key已经在dictionary中存在了,那么则进行修改操作;而且,我们可以用dictionaryName[key]来读取某个item值;
delete:用del dictionaryName[key]做删除操作;
loops:用for key in students: 这种形式做循环操作;
len():返回dictionary的大小,共有多少个键值对;
in :查看某key是否在dictionary中;
==:判断两dictionary是否包含相同的内容;
keys():返回dictionary中的所有key;
values():返回所有的值;
items():返回所有的内容,以键值对的tuple形式显示;
clear():删除所有内容;
get(key):获取键为key的值;
pop(key):删除键为key的项,并返回其值;
popitem():随机删除一个项,并返回其内容;
下面对这些函数举简单例子:
students = {"111-58-5858":"John", "132-59-5959":"Peter"}
# add
students["234-56-9010"] = "Susan"
# modify
students["111-58-5858"] = "Smith"
# 检索
print (students["111-58-5858"]) # Smith
# 删除
del students["234-56-9010"]
# 循环
for key in students:
print (key + ":" + students[key]) # 111-58-5858:Smith 132-59-5959:Peter
# len
print (len(students)) # 2
# in, not in
print ("111-58-5858" in students) # True
print ("111" not in students) # True
# ==, !=
d1 = {"red":22, "blue":2}
d2 = {"blue":2, "red":22}
print (d1==d2) # True
print (d1!=d2) # False
#keys()
print (tuple(students.keys())) # ('111-58-5858', '132-59-5959')
print (tuple(students.values())) # ('Smith', 'Peter')
print (tuple(students.items())) # (('111-58-5858', 'Smith'), ('132-59-5959', 'Peter'))
print (students.get("111-58-5858")) # Smith
print (students.pop("111-58-5858")) # Smith
print (students.popitem()) # ('132-59-5959', 'Peter')