以下只是个人在学习中摘抄的一些知识点,便于自己的理解与对语言的掌握。
1.函数引用的实际参数在函数调用时引入局部符号表,因此,实参总是 传值调用 (这里的 值 总是一个对象引用,而不是该对象的值)。 一个函数被另一个函数调用时,一个新的局部符号表在调用过程中被创建。
2.关于插入list的a[len(a):] = [y]方法。
>>> a = [‘asd‘, ‘748‘, ‘zxc‘, 123, 465, 1.3] >>> x = ‘add‘ >>> y = ‘add2‘ >>> a.append(x) >>> a [‘asd‘, ‘748‘, ‘zxc‘, 123, 465, 1.3, ‘add‘] >>> a[len(a):] = [y] >>> a [‘asd‘, ‘748‘, ‘zxc‘, 123, 465, 1.3, ‘add‘, ‘add2‘]
和此相同的还有一大类,见python参考手册
http://www.pythondoc.com/pythontutorial27/datastructures.html#tut-loopidioms
3.删除并以弹出的形式返回元素。
list.pop([i])
如果没有指定索引,a.pop()
返回最后一个元素。元素随即从链表中被删除。
(方法中 i 两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,你会经常在 Python 库参考手册中遇到这样的标记。)
4.list的sort方法
sorted(iterable[, cmp[, key[, reverse]]])
注意,[]表示相关参数是可选的
5.堆栈,堆栈是特定的数据结构,特点是先进后出,python可以轻易的实现:
使用list.append(x)来添加元素到堆栈顶
使用list.pop()将堆栈顶的元素弹出
6.队列也是特殊的数据结构,特点是先进先出,Python中也是可以实现,但是相比于末尾弹出,列表头插入和弹出是不‘不经济的’,
因为相对来说从列表末尾添加和弹出很快;在头部插入和弹出很慢(因为为了一个元素,要移动整个列表中的所有元素)。
Python专门设计了一种在列表头快速弹出的方法:
>>> from collections import deque >>> queue = deque(["Eric", "John", "Michael"]) >>> queue.append("Terry") # Terry arrives >>> queue.append("Graham") # Graham arrives >>> queue.popleft() # The first to arrive now leaves ‘Eric‘ >>> queue.popleft() # The second to arrive now leaves ‘John‘ >>> queue # Remaining queue in order of arrival deque([‘Michael‘, ‘Terry‘, ‘Graham‘])
插入就比较简单了:例如 a.insert(0, x)
会插入到整个链表之前
7.函数式编程工具, filter(),map() 以及 reduce()
filter(function, sequence)
返回一个 sequence(序列),包括了给定序列中所有调用 function(item)
后返回值为 true 的元素(如果可能的话,会返回相同的类型)。
如果该 序列 (sequence)是一个 str, unicode 或者 tuple,返回值必定是同一类型,否则,它总是 list。例如,以下程序可以计算一个被 3 或者 5 整除的序列:
>>> def f(x):return x % 3 == 0 or x % 5 == 0 ... >>> filter(f,range(2,100)) <filter object at 0x00E761C0> >>> filter(f, range(2, 25)) <filter object at 0x00E761D8> >>> print(f) <function f at 0x00E99460> >>> print(filter(f,range(2,100))) <filter object at 0x00E76250> >>> print(list(filter(f,range(2,100)))) [3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24, 25, 27, 30, 33, 35, 36, 39, 40, 42, 45, 48, 50, 51, 54, 55, 57, 60, 63, 65, 66, 69, 70, 72, 75, 78, 80, 81, 84, 85, 87, 90, 93, 95, 96, 99]
出现<filter object at 0x00E761C0>是因为filter返回一个列表需要list()帮助。
map(function, sequence)
为每一个元素依次调用 function(item)
并将返回值组成一个链表返回。
可以传入多个序列,函数也必须要有对应数量的参数,执行时会依次用各序列上对应的元素来调用函数
>>> seq = range(8) >>> def add(x, y): return x+y ... >>> map(add, seq, seq) [0, 2, 4, 6, 8, 10, 12, 14]
reduce(function, sequence)
返回一个单值,它是这样构造的:首先以序列的前两个元素调用函数 function,再以返回值和第三个参数调用,依次执行下去。
如果序列中只有一个元素,就返回它,如果序列是空的,就抛出一个异常。
可以传入第三个参数作为初始值。如果序列是空的,就返回初始值,否则函数会先接收初始值和序列的第一个元素,然后是返回值和下一个元素,依此类推。
8.创建列表
>>> squares = [x**2 for x in range(10)] >>> squares [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> str = [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y] >>> str [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
如果想要得到一个元组 (例如,上面例子中的 (x, y)),必须要加上括号:
>>> str2 = [(x, x**2) for x in range(6)] >>> str2 [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)] >>> str2 = [x, x**2 for x in range(6)] File "<stdin>", line 1 str2 = [x, x**2 for x in range(6)] ^ SyntaxError: invalid syntax >>>
列表推导式可嵌套函数,也可以使用复杂的表达式:
9.创建集合set
集合是Python中的一种特殊数据结构。集合的特点是无序、不重复,基本功能包括关系测试和消除重复元素。集合对象还支持 union(联合),intersection(交),difference(差)和 sysmmetric difference(对称差集)等数学运算。
注意:想要创建空集合,你必须使用 set() 而不是 {}。{}用来创建空字典。
>>> basket = [‘apple‘, ‘orange‘, ‘apple‘, ‘pear‘, ‘orange‘, ‘banana‘] >>> fruit = set(basket) # create a set without duplicates >>> fruit set([‘orange‘, ‘pear‘, ‘apple‘, ‘banana‘]) >>> ‘orange‘ in fruit # fast membership testing True >>> ‘crabgrass‘ in fruit False >>> # Demonstrate set operations on unique letters from two words ... >>> a = set(‘abracadabra‘) >>> b = set(‘alacazam‘) >>> a # unique letters in a set([‘a‘, ‘r‘, ‘b‘, ‘c‘, ‘d‘]) >>> a - b # letters in a but not in b set([‘r‘, ‘d‘, ‘b‘]) >>> a | b # letters in either a or b set([‘a‘, ‘c‘, ‘r‘, ‘d‘, ‘b‘, ‘m‘, ‘z‘, ‘l‘]) >>> a & b # letters in both a and b set([‘a‘, ‘c‘]) >>> a ^ b # letters in a or b but not both set([‘r‘, ‘d‘, ‘b‘, ‘m‘, ‘z‘, ‘l‘])
类似于列表推导式,也有集合推导式用法:
>>> a = {x for x in ‘abracadabra‘ if x not in ‘abc‘} >>> a {‘r‘, ‘d‘}
原文:https://www.cnblogs.com/PiaYie/p/13261779.html