PYTHON 技巧
Python Learning Notes
Python Quick Grammar
-
- 1. 变量互换
- 2. 连续赋值
- 3. 自动解包
- 4. 链式比较
- 5. 重复列表
- 6. 重复字符串
- 7. 三目运算
- 8. 字典合并
- 9. 字符串反转
- 10. 列表转字符串
- 11. for else 语句
- 12. 字典推导式
- 13. 用Counter查找列表中出现最多的元素
- 14. 默认值字典
- 15. 赋值表达式
- 16. isinstance
- 17. 用 http.server 共享文件
- 18. zip 函数实现字典键值对互换
- 19. 查找列表中出现次数最多的数字
- 20. 使用 slots 节省内存
- 21. 扩展列表
- 22. 列表负数索引
- 23. 列表切片
- 24. 二维数组变一维数组
- 25. 有索引的迭代
- 26. 列表推导式
- 27. 生成器表达式
- 28. 集合推导式
- 29. 判断key是否存在字典中
- 30. 装饰器
- 31. 字典子集
- 32. 反转字典
- 33. 具名元组
- 34. 设置字典默认值
- 35. 有序字典
- 36. 列表中最大最小的前n个数
- 37. 打开文件
- 38. 两个列表组合成字典
- 39. 去除列表中重复元素
- 40. 打印日历
- 41. 匿名函数
1. 变量互换
a=1
b=2
a,b=b,a
a,b
(2, 1)
2. 连续赋值
a=b=c=50
a,b,c
(50, 50, 50)
3. 自动解包
a,b,c=[1,2,3]
a,b,c
(1, 2, 3)
a,*others=[1,2,3,4]
print(a)
print(*others)
1
2 3 4
4. 链式比较
a=10
if(5<a<15):
print(a)
10
5. 重复列表
[5,2]*4
[5, 2, 5, 2, 5, 2, 5, 2]
6. 重复字符串
"hello"*3
'hellohellohello'
7. 三目运算
age = 30
slogon = "牛逼" if age == 30 else "niubility"
print(slogon)
牛逼
8. 字典合并
a={"a":1}
b={"b":2}
{**a,**b}
{'a': 1, 'b': 2}
9. 字符串反转
s = "i love python"
s[::-1]
'nohtyp evol i'
10. 列表转字符串
s = ["i", "love", "python"]
" ". join(s)
'i love python'
11. for else 语句
foo=[2,3,4,5]
for i in foo:
if i == 0:
break
else:
print("未发现")
未发现
12. 字典推导式
m = {x: x**2 for x in range(5)}
m
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
13. 用Counter查找列表中出现最多的元素
content = ["a", "b", "c", "a", "d", "c", "a"]
from collections import Counter
c = Counter(content)
c. most_common(1)
[('a', 3)]
14. 默认值字典
from collections import defaultdict
d = defaultdict(list)
d['a']. append(1)
d['a']
[1]
15. 赋值表达式
import re
data = "hello123world"
if match:=re. search("(\d+)", data):
num = match. group(1)
else:
num=None
num
'123'
16. isinstance
x=1
b=isinstance(x, (int, float))
b
True
17. 用 http.server 共享文件
#python3 -m http. server
18. zip 函数实现字典键值对互换
lang = {"python":". py", "java":". java"}
dict(zip(lang. values(), lang. keys()))
{'. py': 'python', '. java': 'java'}
19. 查找列表中出现次数最多的数字
test = [1, 2, 3, 4, 2, 2, 3, 1, 4, 4, 4, 5]
max(set(test), key=test. count)
4
20. 使用 slots 节省内存
class MyClass(object):
def __init__(self, name, identifier):
self. name = name
self. identifier = identifier
self. set_up()
print(sys. getsizeof(MyClass))
class MyClass(object):
__slots__ = ['name', 'identifier']
def __init__(self, name, identifier):
self. name = name
self. identifier = identifier
self. set_up()
print(sys. getsizeof(MyClass))
1064
896
21. 扩展列表
i = ['a','b','c']
i. extend(['e','f','g'])
i
['a', 'b', 'c', 'e', 'f', 'g']
22. 列表负数索引
a = [ 1, 2, 3]
a[-1]
3
23. 列表切片
a = [0,1,2,3,4,5,6,7,8,9]
a[3:6] # 第3个到第6个之间的元素
a[:5] # 前5个元素
a[5:] # 后5个元素
a[::] # 所有元素(拷贝列表)
a[::2] # 偶数项
a[1::2] # 奇数项
a[::-1] # 反转列表
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
24. 二维数组变一维数组
import itertools
a = [[1, 2], [3, 4], [5, 6]]
i = itertools. chain(*a)
list(i)
[1, 2, 3, 4, 5, 6]
25. 有索引的迭代
a = ['Merry', 'Christmas ', 'Day']
for i, x in enumerate(a):
print ('{}: {}'. format(i, x))
0: Merry
1: Christmas
2: Day
26. 列表推导式
le = [x*2 for x in range(10)]
le # 每个数取平方
le = [x for x in range(10) if x%2 == 0]
le # 获取偶数项
[0, 2, 4, 6, 8]
27. 生成器表达式
ge = (x*2 for x in range(10))
print(ge)
print(next(ge))
print(next(ge))
print(next(ge))
<generator object <genexpr> at 0x000001D693764190>
0
2
4
28. 集合推导式
nums = {n**2 for n in range(10)}
nums
{0, 1, 4, 9, 16, 25, 36, 49, 64, 81}
29. 判断key是否存在字典中
d = {"1":"a"}
print('1' in d)
print(d['1'])
print(d. get("1"))
print(d. get("2"))
True
a
a
None
30. 装饰器
from functools import wraps
def tags(tag_name):
def tags_decorator(func):
@wraps(func)
def func_wrapper(name):
return "<{0}>{1}</{0}>". format(tag_name, func(name))
return func_wrapper
return tags_decorator
@tags("p")
def get_text(name):
"""returns some text"""
return "Hello " + name
print(get_text("Python"))
<p>Hello Python</p>
31. 字典子集
def sub_dicts(d, keys):
return {k:v for k, v in d. items() if k in keys}
sub_dicts({1:"a", 2:"b", 3:"c"}, [1,2])
{1: 'a', 2: 'b'}
32. 反转字典
d = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
zip(d. values(), d. keys())
z = zip(d. values(), d. keys())
dict(z)
{1: 'a', 2: 'b', 3: 'c', 4: 'd'}
33. 具名元组
from collections import namedtuple
Point = namedtuple("Point", "x,y")
p = Point(x=1, y=2)
print(p. x)
print(p[0])
print(p. y)
print(p[1])
1
1
2
2
34. 设置字典默认值
d = dict()
if 'a' not in d:
d['a'] = []
d['a']. append(1)
d
d. setdefault('b',[]). append(2)
d
{'a': [1], 'b': [2]}
35. 有序字典
from collections import OrderedDict
m = OrderedDict((str(x), x) for x in range(10))
m. keys() # key 按照插入的顺序排列
odict_keys(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'])
36. 列表中最大最小的前n个数
import heapq
a = [51, 95, 14, 65, 86, 35, 85, 32, 8, 98]
heapq. nlargest(5,a)
heapq. nsmallest(5,a)
[8, 14, 32, 35, 51]
37. 打开文件
import os
with open('foo. txt', 'w') as f:
f. write("hello")
os. remove("foo. txt")
38. 两个列表组合成字典
list_1 = ["One","Two","Three"]
list_2 = [1,2,3]
dictionary = dict(zip(list_1, list_2))
print(dictionary)
{'One': 1, 'Two': 2, 'Three': 3}
39. 去除列表中重复元素
my_list = [1,4,1,8,2,8,4,5]
my_list = list(set(my_list))
print(my_list)
[1, 2, 4, 5, 8]
40. 打印日历
import calendar
print(calendar. month(2021, 1))
January 2021
Mo Tu We Th Fr Sa Su
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
41. 匿名函数
add = lambda a,b:a+b
add(1,2)
3