Python3 入门专栏
http://blog.youkuaiyun.com/column/details/19679.html
序列 Sequence
序列是 python 中最基本的数据结构,序列中的每个元素都分配一个数字索引,索引从 0 开始;
python 有6个序列的内置类型:List 列表、Tuple 元组、String 字符串、Unicode 字符串、buffer 对象、xrange 对象;
序列都可以进行以下通用的操作:
- 索引(indexing):使用方括号 [ ]进行索引访问,如seq[0]
- 切片(sliceing):使用方括号 [:] 进行切片,如:seq[2:7]
- 加(adding):使用加号+进行序列拼贴,如: seq = seq1 + seq2
- 乘(multiplying):使用乘号*进行序列重复,如: seq = tinySeq * 5
- 检查成员资格:使用 in 或not in检查成员资格,如:e in seq
此外,python 已经内置以下对序列的便捷函数:
- len():返回序列长度
- min():返回序列中最小的元素
- max():返回序列中最大的元素
在 python 的基本数据类型中:Number,String,Tuple ,Sets 是不可更改的对象,List,Dictionary 是可变对象;
列表 List
- List 可以完成大多数集合类的数据结构实现,列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表;
- List 写在方括号 [ ] 之间,元素用逗号隔开,支持嵌套;
- 列表中的元素是可变对象,可以重新赋值;
List 的创建和元素访问
list1 = [12, 2.33, "Hello", "World"]
list2 = ["!", 1, 2]
print(list1) # 输出列表:[12, 2.33, 'Hello', 'World']
print(list1[0]) # 输出第1个元素:12
print(list[-1]) # 输出最后一个元素:!
print(list1[1:3]) # 输出第2到第3个元素:[2.33, 'Hello']
print(list1[2:]) # 输出从第3个元素开始的所有元素:['Hello', 'World']
print(list1 * 2) # 输出2次列表:[12, 2.33, 'Hello', 'World', 12, 2.33, 'Hello', 'World']
print(list1 + list2) # 连接列表:[12, 2.33, 'Hello', 'World', '!', 1, 2]
del list1[0] # 删除列表元素
可以通过range() 函数来快速创建列表:
list1 = list(range(5)) # [0, 1, 2, 3, 4]
list2 = list(range(0, 100, 10)) # [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
也可以创建一个空列表,再填充元素
citys = [] # or: citys = list()
citys.append("Guanzhou")
citys.append("Shanghai")
citys.append("Beijing")
也可以通过list(seq) 函数将其他的序列对象转化为 list 对象
嵌套列表
pyton 支持嵌套列表,以下是一个二维列表的创建和元素获取
matrix = [[1, 2, 3, 4], [5, 6, 7, 8]]
print(matrix[0][1]) # 输出2
matrix2 = list()
array1 = [1, 2, 3, 4]
array2 = [5, 6, 7, 8]
matrix2.append(array1)
列表的遍历
list1 = [1, 2, 3, 4, 5]
for e in list1:
print(e)
for i in range(len(list1)):
print(list1[i])
List 的内置函数和方法
list.count(obj) | 统计某个元素在列表中出现的次数 |
ist.append(obj) | 在列表末尾添加新的对象 |
list.insert(index, obj) | 将对象插入列表 |
list.remove(obj) | 移除列表中某个值的第一个匹配项 |
list.pop(obj=list[-1]) | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
list.extend(seq) | 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
list.copy() | 复制列表 |
list.clear() | 清空列表 |
list.reverse() | 反向列表中元素 |
list.sort([func]) | 对原列表进行排序(默认升序排列) |
元组 Tuple
- 元组(tuple)与列表类似,不同之处在于元组的元素不能修改;
- 元组写在小括号 ( ) 里,元素之间用逗号隔开;
- 元组中的元素是不可变对象,不可以从重新赋值;
tuple1 = ("abcd", 123 , 2.333, "Hello", 70.2)
tuple2 = () #or tuple2 = tuple()
tuple3 = (20,) # 只包含一个元素的元组
var = tuple[1];
del tuple;
集合 Sets
- 集合(set)是一个无序不重复元素的序列,主要功能是进行成员关系测试和删除重复元素。
- 可以使用大括号 { } 或者 set() 函数创建集合,但是创建一个空集合必须用 set();
- 集合中的元素是不可变对象,不可以重新赋值;
student1 = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
print(student) # 输出集合,重复的元素被自动去掉:{'Mary', 'Tom', 'Jack', 'Jim', 'Rose'}
student2 = set() # 空集合
student3 = set(myList) #从 List 创建集合
由于 set 无法通过下标访问,对于 set 中元素的访问可以通过 for in 进行遍历,或者通过迭代器来进行;
字典 Dictionary
- 字典是一种映射类型,字典用"{ }"标识,它是一个无序的键(key) : 值(value)对集合,类似于 Java 的 HashMap ,PHP 的映射数组;
- 键(key)必须使用不可变类型,在同一个字典中,键(key)必须是唯一的;
- 同样的字典支持无限嵌套(类似 json 格式);
- 字典中的元素是可变对象,可以重新赋值;
字典的创建和基本操作
dict1 = {"name": "assad", "age": 20, "city": "Guangzhou"}
dict2 = {} # or dict2 = dict()
dict2["one"] = "are you ok"
dict2[1] = 12
print(dict1["name"]) # 输出 dict1 中 key = "name" 的 value
print(dict2[1]) # 输出 dict2 中 key = 2 的 value
print(dict1.keys()) # 输出 dict1 的所有 key
print(dict1.values()) # 输出 dict1 的所有 value
del dict["name"] # 删除字典元素
遍历字典
user = {"name": "assad", "age": 20, "city": "Guangzhou"}
for key in user.keys(): # or for key in user:
print(key, end=":")
print(user[key])
字典的内置方法和函数
dict.items() | 以列表返回可遍历的(键, 值) 元组数组 |
dict.keys() | 以列表返回一个字典所有的键 |
dict.values() | 以列表返回一个字典所有的值 |
dict.get(key, default=None) | 返回指定键的值,如果值不在字典中返回default值 |
dict.setdefault(key, default=None) | 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为 default |
dict.pop(key[,default]) | 删除字典给定键 key 所对应的值,返回值为被删除的值,key值为空时返回default值 |
dict.clear() | 清空字典内所有元素 |
dict.copy() | 返回一个字典的浅复制 |
dict.fromkeys() | 创建一个新字典,以序列 seq 中元素做字典的键,val为字典所有键对应的初始值 |
dict.update(dict2) | 把字典dict2的键/值对更新到dict里 |
迭代器
- python 提供了迭代器对象可用于访问对象集合,字符串,列表,元组,集合对象等都可用于创建迭代器:
- 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
- 迭代器有两个基本的方法:iter() 和 next()。
list1 = [1, 2, 3, 4, 5]
it = iter(list1) # 创建 List 的迭代器对象
# 通过 for 遍历迭代器对象
for e in it:
print(e, end=" ")
# 通过 next 方法遍历
it = iter(list1)
while True:
try:
print(next(it), end=" ")
except StopIteration:
break