第2章_Python基础

4 阅读6分钟
1.除法运算

python3.x当中,用/得到的是浮点数的除法,包含小数位;而//则得到一个整数。但是//并不是截断,而是floor操作,即返回返回小于或等于输入值的整数。1如果是截断的话,是math.trunc,即删除小数,只保留整数部分。2一般在leecode做题,都是用//做整除

2.三目运算符

一般的三目运算符是?:

(判断条件) ? (为真,则执行) : (为假,则执行)

python当中用if-else代替

(判断条件) if (为真,则执行) else (为假,则执行)

3.实现switch

python当中是没有switch的,我们可以用字典模拟3

def case1():                            
    print('This is the case1')
# 第一种情况执行的函数

def case2():                            
    print('This is the case2')
# 第二种情况执行的函数

def case3():                            
    print('This is the case3')
# 第三种情况执行的函数

def default():                          
    print('No such case')
# 默认情况下执行的函数

switch = {'case1': case1,                
          'case2': case2,
          'case3': case3,
          }
# 注意此处不要加括号

choice = 'case1'                         
# 获取选择
switch.get(choice, default)()            
# 执行对应的函数,如果没有就执行默认的函数
4.id函数4

返回对象的内存地址。

5.is==的区别

python的对象有三个基本的要素:idtypevalue。其中idtype表示对象的地址和类型,可以由同名函数得到。而value则是对象的值,通过变量名直接引用。

is用于判断两个变量引用对象是否为同一个 ,==用于判断引用变量的值是否相等

6.列表和元组的区别5
  • 列表可改变,元组不可改变,元组访问速度更快

  • 列表可被用于保存多个互相独立对象的数据集合

  • 元组用于描述一个不会改变的事物的多个属性

7.字典类型6
  • 新建字典可以直接使用{}包裹键值对,键和值使用:进行分割,键值对之间使用,进行分割。也可以使用dict.fromkeys(seq[, value])函数7进行新建。当我们想要进行去重操作的时候,除了使用集合set,也可以缺省value参数新建字典,利用字典的键不能够重复来进行去重。

  • 字典的键是不可变的,因此元组可以当作键而列表不能。

  • 访问字典元素的时候,可以直接用dict[key]来进行访问;也可以使用dict.get(key, default=None)8,即返回指定键的值,如果键不在字典中返回default值。

  • dict.setdefault(key, default=None)可以检测某个键是否存在9,如果不存在就新建键并设置为默认值

8.集合类型
  • 集合自带的交集操作set.intersection(set1, set2 ... etc)10,会产生一个新的集合。还有一种在原集合上进行的操作set.intersection_update(set1, set2 ... etc)11

  • 集合的并集操作set.union(set1, set2...)12

  • 差集操作set.difference(set)13

  • 其他函数14

9.逆序输出
  1. 列表可以使用list.reverse()15

  2. 使用列表的切片操作list[::-1],步长为-1

  3. 使用内置函数reversed(seq)16

10.sortsorted
  • list.sort( key=None, reverse=False)是列表自带的方法,在原列表上进行操作17

  • sorted(iterable, key=None, reverse=False) 是内置函数,可以对所有可迭代对象进行排序,产生一个新的对象。18

  • sorted当中的key参数可以指定为lambda表达式,例如按照绝对值排序

    list1 = [3,5,-4,-1,0,-2,-6]
    sorted(list1, key=lambda x: abs(x))
    [0, -1, -2, 3, -4, 5, -6]
    
11.列表元素的计数
  • 内置的list.count(obj)方法19

  • 使用Counter

    from collections import Counter
    c = Counter('sadasfas')
    print(c)
    
    # Counter({'s': 3, 'a': 3, 'd': 1, 'f': 1})
    
12.join+连接字符串20

join的性能要比+更好

原因是这样的,字符串是不可变对象,当用操作符+连接字符串的时候,每执行一次+都会申请一块新的内存,然后复制上一个+操作的结果和本次操作的右操作符到这块内存空间,因此用+连接字符串的时候会涉及好几次内存申请和复制。而join在连接字符串的时候,会先计算需要多大的内存存放结果,然后一次性申请所需内存并将字符串复制过去,这是为什么join的性能优于+的原因。所以在连接字符串数组的时候,我们应考虑优先使用join。

13.封装和解构21
  • a,b = b,a,右边使用了封装,左边使用了解构

  • *代表此变量在解构的时候可以接收多个值,从而形成列表,如:

    head, *mid, tail = lst
    #执行结果1 [3, 5, 7, 9, 11, 13, 15, 17] 19

  • _代表此变量在解构的时候忽略所接收的值

14.collections模块22

其中的counter方法可以支持方便、快速的计数。其某些性质类似于字典,如果某个项缺失则会返回0,而不是报出KeyError。使用方法如下:

from collections import Counter

cnt = Counter()
wordList = ["a","b","c","c","a","a"]
for word in wordList:
    cnt[word] += 1
print(cnt)
# 按照字典的方式进行使用

c = Counter("gallahad")
# 从可迭代的字符串初始化counter
# Counter({'a': 3, 'l': 2, 'h': 1, 'g': 1, 'd': 1})
c = Counter({'red':4,'blue':2})
# 从映射初始化counter
# Counter({'red': 4, 'blue': 2})
c = Counter(cats = 4,dogs = 8)
# 从args初始化counter
# Counter({'dogs': 8, 'cats': 4})

c
# Counter({'a': 4, 'b': 2, 'c': 0, 'd': -2})
d
# Counter({'d': 4, 'b': 2, 'a': 1, 'c': -3})
c.update(d)
# Counter({'a': 5, 'b': 4, 'd': 2, 'c': -3})
# 更新Counter

collections模块还有双向列表deque、设置字典缺省值defaultdict、有序字典OrderedDict22。其中有序字典方法强调字典的顺序,如果两个字典的元素相同而插入顺序不同,则OrderedDict判定为不同,而默认的dict会判定为相同。最新的dict当中已经支持字典的取出顺序与插入顺序相同。

15.编码规范
  1. 尽量使用4个空格进行缩进,尽量避免使用tab,禁止混用tab和空格,可以在编辑器里面把tab设置为4个空格

  2. 冒号(:)、逗号(,)、分号(;)之前不要加空格,左括号的右侧和右括号的左侧不要加空格。

  3. #注释的后面要空一格,块注释是在一段代码之前,行注释是在每行代码之后。

  4. 尽量使用join拼接字符串


参考文献

python问题总结(2)

Python面试题大全(一):基础知识学习

Python面试题大全(二):python高级语法

Python面试题大全(三):Web开发(Flask、爬虫)

Python面试题大全(四):数据库篇

Python面试题大全(五):测试、大数据、数据结构、架构

Footnotes

  1. Python3 floor() 函数

  2. Python2.x 与 3​​.x 版本区别

  3. Python switch(多分支选择)的实现

  4. Python id() 函数

  5. Python列表和元组的详细区别

  6. Python 字典(Dictionary)

  7. Python 字典(Dictionary) fromkeys()方法

  8. Python 字典(Dictionary) get()方法

  9. Python 字典(Dictionary) setdefault()方法

  10. Python Set intersection() 方法

  11. Python Set intersection_update() 方法

  12. Python Set union() 方法

  13. Python Set difference() 方法

  14. Python3 集合

  15. Python3 List reverse()方法

  16. Python3 reversed 函数

  17. Python3 List sort()方法

  18. Python3 sorted() 函数

  19. Python3 List count()方法

  20. Python中连接字符串用join还是+

  21. python封装和解构

  22. python collections模块详解 2