--------不断更新中----------
本文记录一些Python自带的知识,不是第三方函数库的一些知识
内置函数
1 filter过滤函数
过滤列表元素, 第一个参数类型为 函数类型
lambda
表达式可用于指定过滤列表元素的条件。
filter(lambda x: x % 3 == 0, [1, 2, 3])
指定将列表 [ 1 , 2 , 3 ] [1,2,3] [1,2,3]中能够被 3 3 3整除的元素过滤出来,其结果是 [ 3 ] [3] [3]
2 zip
将两个或多个小列表链接起来,组成一个大列表,这个列表的每个元素为一个元组,这个元组由对应位置的所有小列表元素的组合。
为了节省空间 zip()
返回的是一个 tuple()
迭代器,所以需要调用 list()
将它转换为 list
。
a = ['a', 'b', 'c', 'd']
b = ['1', '2', '3', '4']
print(zip(a, b))
print(list(zip(a, b)))
'''
<zip object at 0x00000244A3377F40>
[('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')]
'''
a = ['a', 'b', 'c', 'd']
b = ['1', '2', '3', '4']
c = ['5', '6', '7', '8']
print(zip(a, b, c))
print(list(zip(a, b, c)))
'''
<zip object at 0x000001F24BEB6D00>
[('a', '1', '5'), ('b', '2', '6'), ('c', '3', '7'), ('d', '4', '8')]
'''
数据类型相关
字典
1 键和值的类型
字典的键必须取不可变的数据类型,如字符串,元组,数字,值可以取任意数据类型
2 items()
以列表形式返回可遍历的(键, 值) 元组的列表
a = {"a": 1, "b": 2, "c": 3}
print(a)
print(a.items())
for key, val in a.items():
print(key, val)
''' 结果
{'a': 1, 'b': 2, 'c': 3}
dict_items([('a', 1), ('b', 2), ('c', 3)])
a 1
b 2
c 3
'''
3 字典的内置方法
方法 | 作用 |
---|---|
dict.clear() | 删除字典内所有元素 |
dict.copy() | 返回一个字典的浅拷贝 |
dict.get(key, default=None) | 返回指定键的值,如果值不在字典中返回default值 |
dict.has_key(key) | 如果键在字典dict里返回true,否则返回false |
dict.items() | 以列表返回可遍历的(键, 值) 元组数组 |
dict.keys() | 以列表返回一个字典所有的键 |
dict.values() | 以列表返回字典中的所有值 |
dict.setdefault(key, default=None) | 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
dict.update(dict2) | 把字典dict2的键/值对更新到dict里 |
字符串
1. 字符串排序
因为字符串为不可变类型,无法对字符串进行排序。
考虑将字符串变为字符数组,对字符数组进行排序,然后再将字符数组拼接为字符串
s = "dsadw"
# 方式一
li = list(s)
li.sort()
print(''.join()) # 拼接
# 方式二
print(''.join(sorted(s)))
两种方式用了不一样的排序函数,下面做一下对比:
sort():
- 为
list
内置的函数,只能对列表进行排序 - 对列表排完序之后,列表本身改变。即输出列表是排完序的列表
sorted():
- 可以对所有可迭代对象进行排序,对字符串排序后产生的是排完序的字符数组
- 拍完序之后,可迭代对象本身不发生变化,因为产生了新的排完序的可迭代对象
2. maketrans和translate
一般 maketrans() 方法需要配合 translate() 方法一起使用。
str.maketrans(intab,outtab[,delchars])
intab
– 需要转换的字符组成的字符串。
outtab
– 转换的目标字符组成的字符串。
delchars
可选参数
,表示要删除的字符组成的字符串。 返回一个字符映射转换表供 translate() 方法调用。
#!/usr/bin/python3
intab = "aeiou"
outtab = "12345"
deltab = "thw"
trans1 = str.maketrans(intab,outtab) # 创建字符映射转换表
trans2 = str.maketrans(intab,outtab,deltab) #创建字符映射转换表,并删除指定字符
test = "this is string example....wow!!!"
print(test.translate(trans1))
print(test.translate(trans2))
输出结果:
th3s 3s str3ng 2x1mpl2…w4w!!!
3s 3s sr3ng 2x1mpl2…4!!!
代码技巧
1. lambda表达式
lambda
能够定义的函数非常受限。函数的结果必须能够作为单独的表达式来计算,这意味着你不能使用多路 if... elif... else
比较,或者 try... except
语句。
和C++一样,lambda
就是一个匿名函数,可以把它当成一个函数对象。
定义函数
# 定义加法函数
add = lambda x, y : x + y
res = add(1, 3) # res = 4
传递函数参数
lambda
表达式可用于指定过滤列表元素的条件。
filter(lambda x: x % 3 == 0, [1, 2, 3])
指定将列表 [ 1 , 2 , 3 ] [1,2,3] [1,2,3]中能够被 3 3 3整除的元素过滤出来,其结果是 [ 3 ] [3] [3]
2. 三元运算符
三元运算符类似C++的三元运算符? :
, 可以有效进行代码压行
代码示例:
求100以内的奇数和
for i in range(100):
res += i if i & 1 else 0
翻译之后:
for i in range(1000):
if i & 1:
res += i
else:
res += 0