一、列表
Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能。
clipboard.png
常用方法:
list.append(x) #把一个元素添加到列表的结尾,相当于 a[len(a):] = [x]。
list.extend(L) #通过添加指定列表的所有元素来扩充列表,相当于 a[len(a):] = L。
list.insert(i, x) #在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如 a.insert(0, x) 会插入到整个列表之前,而 a.insert(len(a), x) 相当于 a.append(x) 。
list.remove(x) #删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。
list.pop([i]) #从列表的指定位置移除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从列表中被移除。(方法中 i 两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,你会经常在 Python 库参考手册中遇到这样的标记。)
list.clear() #移除列表中的所有项,等于del a[:]。
list.index(x) #返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。
list.count(x) #返回 x 在列表中出现的次数。
list.sort( key=None, reverse=False) #对列表中的元素进行排序。
list.reverse() #倒排列表中的元素。
list.copy() #返回列表的浅复制,等于a[:]。
del a[:] #通过一个列表中依索引而不是值来删除一个元素
len(list) #列表元素个数
max(list) #返回列表元素最大值
min(list) #返回列表元素最小值
list(seq) #将元组转换为列表
当做堆栈使用
append() #把一个元素添加到堆栈顶
pop() #把一个元素从堆栈顶释放出来
当作队列使用
只是在队列里第一加入的元素,第一个取出来;但是拿列表用作这样的目的效率不高。在列表的最后添加或者弹出元素速度快,然而在列表里插入或者从头部弹出速度却不快(因为所有其他的元素都得一个一个地移动)。
append() #把一个元素添加到队首
popleft() #从队尾释放一个元素
列表推导式
每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。
#使用方法
>>> [[x, x**2] for x in vec]
[[2, 4], [4, 16], [6, 36]]
#这里我们对序列里每一个元素逐个调用某方法:
>>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']
#我们可以用 if 子句作为过滤器:
>>> [3*x for x in vec if x > 3]
[12, 18]
>>> [3*x for x in vec if x < 2]
[]
#以下是一些关于循环和其它技巧的演示:
>>> vec1 = [2, 4, 6]
>>> vec2 = [4, 3, -9]
>>> [x*y for x in vec1 for y in vec2]
[8, 6, -18, 16, 12, -36, 24, 18, -54]
>>> [x+y for x in vec1 for y in vec2]
[6, 5, -7, 8, 7, -5, 10, 9, -3]
>>> [vec1[i]*vec2[i] for i in range(len(vec1))]
[8, 12, -54]
#列表推导式可以使用复杂表达式或嵌套函数:
>>> [str(round(355/113, i)) for i in range(1, 6)]
['3.1', '3.14', '3.142', '3.1416', '3.14159']
二、字典
常用方法
str(dict) #输出字典,以可以打印的字符串表示。
radiansdict.clear() #删除字典内所有元素
radiansdict.copy() #返回一个字典的浅复制
radiansdict.fromkeys() #创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
radiansdict.get(key, default=None) #返回指定键的值,如果值不在字典中返回default值
key in dict #如果键在字典dict里返回true,否则返回false
radiansdict.items() #以列表返回可遍历的(键, 值) 元组数组
radiansdict.keys() #返回一个迭代器,可以使用 list() 来转换为列表
radiansdict.setdefault(key, default=None) #和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
radiansdict.update(dict2) #把字典dict2的键/值对更新到dict里
radiansdict.values() #返回一个迭代器,可以使用 list() 来转换为列表
pop(key[,default]) #删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
popitem() #随机返回并删除字典中的一对键和值(一般删除末尾对)。str(dict):输出字典,以可以打印的字符串表示。
radiansdict.clear() #删除字典内所有元素
radiansdict.copy() #返回一个字典的浅复制
radiansdict.fromkeys() #创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
radiansdict.get(key, default=None) #返回指定键的值,如果值不在字典中返回default值
key in dict #如果键在字典dict里返回true,否则返回false
radiansdict.items() #以列表返回可遍历的(键, 值) 元组数组
radiansdict.keys() #返回一个迭代器,可以使用 list() 来转换为列表
radiansdict.setdefault(key, default=None) #和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
radiansdict.update(dict2) #把字典dict2的键/值对更新到dict里
radiansdict.values() #返回一个迭代器,可以使用 list() 来转换为列表
radiansdict.pop(key[,default]) #删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
radiansdict.popitem() #随机返回并删除字典中的一对键和值(一般删除末尾对)。
字典推导
>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}
转为字典
>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'jack': 4098, 'guido': 4127}
>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'jack': 4098, 'guido': 4127}
三、集合
1.常用方法
add() #为集合添加元素
clear() #移除集合中的所有元素
copy() #拷贝一个集合
difference() #返回多个集合的差集
difference_update() #移除集合中的元素,该元素在指定的集合也存在。
discard() #删除集合中指定的元素
intersection() #返回集合的交集
intersection_update() #删除集合中的元素,该元素在指定的集合中不存在。
isdisjoint() #判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
issubset() #判断指定集合是否为该方法参数集合的子集。
issuperset() #判断该方法的参数集合是否为指定集合的子集
pop() #随机移除元素
remove() #移除指定元素
symmetric_difference() #返回两个集合中不重复的元素集合。
symmetric_difference_update() #移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
union() #返回两个集合的并集
update() #给集合添加元素
推导式
>>> (x for x in range(10))
[[2, 4], [4, 16], [6, 36]]
四、遍历技巧
在序列中遍历时,索引位置和对应值可以使用 enumerate() 函数同时得到:
>>> for i, v in enumerate(['tic', 'tac', 'toe']):
... print(i, v)
...
0 tic
1 tac
2 toe
同时遍历两个或更多的序列,可以使用 zip() 组合:
>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
... print('What is your {0}? It is {1}.'.format(q, a))
...
What is your name? It is lancelot.
What is your quest? It is the holy grail.
What is your favorite color? It is blue.
要反向遍历一个序列,首先指定这个序列,然后调用 reversed() 函数:
>>> for i in reversed(range(1, 10, 2)):
... print(i)
要按顺序遍历一个序列,使用 sorted() 函数返回一个已排序的序列,并不修改原值:
>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> for f in sorted(set(basket)):
... print(f)
...
apple
banana
orange
pear
在字典中遍历时,关键字和对应的值可以使用 items() 方法同时解读出来:
>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
... print(k, v)
...
gallahad the pure
robin the brave