python cookbook笔记[1.1-1.53]

list加减乘除 & 元组比较大小

1. list直接加减乘除

  • +list加list,把两个list中的元素合并为一个list
1
2
3
4
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = list1 + list2
print(list3) # [1, 2, 3, 4, 5, 6]
  • -不支持此操作
1
2
3
4
list1 = [4, 3, 2]
list2 = [3, 2, 1]
list3 = list1-list2
print(list3) # TypeError: unsupported operand type(s) for -: 'list' and 'list'
  • *列表乘int,每个元素重复扩充
1
2
3
4
5
6
7
8
list1 = [4, 3, 2]
list2 = [3, 2, 1]
list3 = list1*list2 # can't multiply sequence by non-int of type 'list'
print(list3)
list3 = list1*1.5 # can't multiply sequence by non-int of type 'float'
print(list3)
list3 = list1*2 # [4, 3, 2, 4, 3, 2]
print(list3)
  • /不支持此操作
1
2
3
4
5
6
list1 = [4, 3, 2]
list2 = [3, 2, 1]
list3 = list1/list2
print(list3) # unsupported operand type(s) for /: 'list' and 'list'
list3 = list1/2
print(list3) # unsupported operand type(s) for /: 'list' and 'int'

2. list元素加减乘除

元素加减乘除,举例+- * /同理

1
2
3
4
list1 = [4, 3, 2]
list2 = [3, 2, 1]
list3 = [a + b for a, b in zip(list1, list2)]
print(list3) # [7, 5, 3]

3. [list].apend([list])和[list].extend([list])

append()这种方法的参数是一个单个元素或者一个整体,该方法没有返回值

1
2
3
4
5
6
7
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = list1 + list2
print(list3) # [1, 2, 3, 4, 5, 6]
list3 = list1.append(list2)
print(list3) # None append无返回值
print(list1) # [1, 2, 3, [4, 5, 6]]

extend()用法同append(),结果同+

1
2
3
4
5
6
7
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = list1 + list2
print(list3) # [1, 2, 3, 4, 5, 6]
list3 = list1.extend(list2)
print(list3) # None extend无返回值
print(list1) # [1, 2, 3, 4, 5, 6]

4. 通过某个key值对列表(字典)排序

1
2
3
list = [(1, 0), (2, 3), (3, 2), (4, -1)]
list.sort(key=lambda x: x[1]) # 对元组下标为'1'的元素进行sort排序
print(list) # [(4, -1), (1, 0), (3, 2), (2, 3)]

5.lambda函数

  • 直接调用
1
2
a = (lambda x: x + 1)(1) # 第一对括号改变优先级,第二队括号表示函数调用参数1(int)
print(a) # 6
  • 默认参数
1
2
a = (lambda x, y=1: x+y)(1) # 支持常规函数参数写法
print(a) # 2

注意事项:

  1. lambda不创建接收变量(def创建的方法是有函数名,而lambda没有函数名)

  2. lambda只是一个表达式,不能包含命令(def是一个语句,lambda可以不同于def 出现在列表常量函数调用参数中)

    1
    2
    3
    f = lambda x : x+1
    num = [f(x) for x in range(10)]
    print num
  3. 自动返回结果(返回表达式中最后一个表达式的值)

  4. 可以直接作为python 列表或python 字典的成员

  5. 不可嵌套(if、for、print等语句不能用于lambda中)

  6. 不可重用(不能共享给别的程序调用,即import [模块].[方法] 无效

  7. 如果for..in..if能做的,不要选择lambda

    1
    num+=1 for x in listx if x>=0
  8. lambda函数拥有自己的命名空间,不能访问自有参数列表之外或全局命名空间里的参数

  9. 参数列表不需要用括号

  10. 冒号不是用来开始新语句块的

  11. 并不会带来程序运行效率的提高,只会使代码更简洁(不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率

  12. 只能写在一行上,也有人也叫他单行函数

6.tuple的大小比较

1
print((2, 4) > (3, -1))  # False

两个tuple大小比较方法是 从第一个位置开始逐个进行比较,

  • 如果不等,当前比较结果就是整个tuple的比较结果

  • 如果相等,继续下一个位置的比较,
    最后,元素多的元组更大:

    1
    print((2, 4, -6) > (2, 4))  # True