Python基础及语法(三)

IPython使用

IPython是增强的CPython,尤其是交互式体验。该项目提供了Jupyter Notebook,之后分离。

提供帮助功能:

  ?:IPython概叙和简介

  help(name):查询指定名称的帮助。

  obj?:列出对象的详细帮助。

  obj??:如果可以,则列出更详细的帮助。

特殊变量

IPython内部提供了非常多的变量,或许能用到的如下:

  _:表示前一次输出

  __:表示倒数第二次输出

  ___:表示倒数第三次输出

  _dh:目录历史

  _oh:输出历史

shell命令

使用'!'+shell命令可执行当前系统shell的命令。

魔术方法

‘%’:如%cd,改变当前工作目录,%pwd,显示当前目录,%ls,显示当前目录文件,%timeit,显示当前语句运行时间。

'%%':如%%timeit,显示当前cell运行时间。%%js,当前cell运行js脚本。

集合set

 集合,简称集,由任意个元素构成的集体。

Python中,它是可变的,无序的,不重复的元素的集合。

初始化

1 s1 = set()
2 s2 = set(range(5))
3 s3 = set([1, 2, 3, 4, 5])
4 s4 = set('abcabc')
5 s5 = {1, 2, 3}

元素性质

去重:元素都是唯一值。

无序:无序,不可索引。

可哈希:元素必须可哈希。

可迭代:元素可被迭代。

1 s1 = set()
2 s1.add(1)  # 把一个元素加入集合
3 print(s1)  # {1}
4 s1.update((2, 3), [4, 5])  # 把1组或多组可迭代对象加入集合
5 print(s1)  # {1, 2, 3, 4, 5}

1 s1 = set(range(5))
2 s1.remove(1)  # 删除指定元素
3 print(s1)  # {0, 2, 3, 4}
4 s1.pop()  # 删除随机元素
5 print(s1)
6 s1.clear()  # 清空集合
7 print(s1)  # set()

集合没有修改,只能利用删除和增加达到效果。

 可以看出在集合查找元素会比列表快。set,dict利用哈希作为key,时间复杂度是O(1)。

索引

非线性结构,无序,不可被索引。

遍历

只要是容器皆可遍历,效率都是O(n)。

集合概念

全集:所有元素的集合。

子集与超集:一个集合A的元素都在另一个集合B里,A是B的子集,B是A的超集。

真子集与真超集:一个集合A的元素都在另一个集合B里,且A≠B,,A是B的真子集,B是A的真超集。

并集:运算符号'|',多个集合合并的结果。

交集:运算符号'&',两个集合A与B,同时属于A和B集合的元素集合为交集。

差集:运算符号'-',两个集合A与B,属于A集合的元素且不属于B的元素集合为差集。

对称差集:运算符号'^',两个集合A与B,只属于A集合的元素与只属于B集合的元素的集合为对称差集,等同于:(A|B)-(A&B)和(A-B)|(B-A)。

1 s1 = set(range(5))
2 s2 = set(range(3, 8))
3 print(s1 | s2)  # {0, 1, 2, 3, 4, 5, 6, 7}
4 print(s1 & s2)  # {3, 4}
5 print(s1 - s2)  # {0, 1, 2}
6 print(s1 ^ s2)  # {0, 1, 2, 5, 6, 7}
7 print(s1 >= s2)  # False,判断S1是否为S2的超集,'<='判断'S1是否为S2的子集。
8 s3 = set(range(3))
9 print(s1 > s3)  # True,判断S1是否为S2的真超集,'<'判断'S1是否为S2的真子集

字典dict

Python中,字典由任意个元素构成的集合,每一个元素称为item,这个item由key与value组成的二元组。

字典是可变的,无序的,key不重复的key-value键值对集合。

注:Python3.6之后字典录入记录了录入顺序,这个特性建议暂时不要使用。如果需要有序的字典,建议使用collections.OrderedDict()

初始化

1 d1 = {}
2 d2 = dict()
3 d3 = dict(k1='v1', k2='v2')
4 d4 = dict(d3)
5 d5 = dict(d4, k3='v3')
6 d6 = dict([('k1', 'v1'), ('k2', 'v2')], k2='v3', k3='v4')
7 d7 = dict.fromkeys(range(5))
8 d8 = dict.fromkeys(range(5), 0)

增与改

1 d = dict()
2 d['k1'] = 'v1'
3 print(d)  # {'k1': 'v1'}
4 d.update(k2='v2')
5 print(d)  # {'k1': 'v1', 'k2': 'v2'}
6 d.update(k1='v3')
7 print(d)  # {'k1': 'v3', 'k2': 'v2'}
8 d['k2'] = 'v4'
9 print(d)  # {'k1': 'v3', 'k2': 'v4'}

 1 d = dict.fromkeys(range(5))
 2 print(d)  # {0: None, 1: None, 2: None, 3: None, 4: None}
 3 d.pop(1)  # 删除key为1的item。
 4 print(d)  # {0: None, 2: None, 3: None, 4: None}
 5 d.pop(1, print('a'))  # a,没有找到key为1的item执行下面代码,不设定则返回keyError。
 6 print(d)  # {0: None, 2: None, 3: None, 4: None}
 7 d.popitem()  # 随机删掉一个item,没有则返回keyError。
 8 print(d)  # {0: None, 2: None, 3: None}
 9 d.clear()  # 清空字典
10 print(d)  # {}

1 d = dict.fromkeys(range(5), 0)
2 print(d[1])  # 0,key存在返回value,不存在返回keyError。
3 print(d.get(5))  # None,key存在返回value,不存在返回缺省值,没有缺省值返回None。
4 print(d.setdefault(5), 'a')  # None a,key存在返回value,不存在创建item,value为缺省值,没有缺省值为None,并返回None和缺省值。

遍历

1 d = dict.fromkeys(range(3), 0)
2 for i in d.values():  # 遍历value
3     print(i)  # 0 0 0
4 for i in d.keys():  # 遍历key
5     print(i)  # 0 1 2
6 for i in d:  # 等同于遍历key
7     print(i)  # 0 1 2
8 for k, v in d.items():  # 遍历item
9     print(k, v)  # 0 0 1 0 2 0

defaultdict

1 from collections import defaultdict
2 d = defaultdict(list)
3 for k in bytes(range(0x41, 0x45)).decode():
4     for v in range(3):
5         d[k].append(v)
6 print(d) #defaultdict(<class 'list'>, {'A': [0, 1, 2], 'B': [0, 1, 2], 'C': [0, 1, 2], 'D': [0, 1, 2]})

 封装和解构

基本概念

1 a, b = 1, 2
2 print(a, b)  # 1 2

Python会先把等号右边的元素封装成一个新的元组,然后解构后按顺序赋值给左边的元素。如果右边的元素不够或溢出均会返回ValueError。

剩余变量结构

1 s = list(range(5))
2 a, *b, c = s
3 print(a, b, c)  # 0 [1, 2, 3] 4

使用'*',可以把溢出的部分全部接收。

选择排序

 1 import random
 2 arr = random.choices(range(1, 101), k=20)
 3 print(arr)
 4 for i in range(len(arr)//2):
 5     is_min, is_max = i, i
 6     last = len(arr)-i-1
 7     for j in range(i+1, last+1):
 8         if arr[is_max] < arr[j]:
 9             is_max = j
10         if arr[is_min] > arr[j]:
11             is_min = j
12     if is_max != last:
13         if is_min == last:
14             is_min = is_max
15         arr[last], arr[is_max] = arr[is_max], arr[last]
16     if is_min != i:
17         arr[i], arr[is_min] = arr[is_min], arr[i]
18 print(arr)
原文地址:https://www.cnblogs.com/bgr1115/p/12626778.html