【python】内置知识学习记录

--------不断更新中----------

本文记录一些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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行码棋

码字好辛苦,总结好吃力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值