Python成为专业人士笔记–Operator操作模块

Python专业笔记系列目录-值得收藏

 

Itemgetter函数

operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号)

要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值

根据itemgetter的值对字典的键-值对进行分组 :

from itertools import groupby
from operator import itemgetter

adict = {'a': 1, 'b': 5, 'c': 1}
print(dict((i, dict(v)) for i, v in groupby(adict.items(), itemgetter(1)))) #itemgetter(1)即将每个字典的value值取出

# 输出: {1: {'a': 1, 'c': 1}, 5: {'b': 5}}

上面的分组代码与下面使用lambda函数等价(但上面的代码速度会更快):

dict((i, dict(v)) for i, v in groupby(adict.items(), lambda x: x[1])) 

itemgetter可以将元组列表中的元素排序(下面的代码将单个元组的两个元素互换位置后逐一比较排序):

 alist_of_tuples = [(5,2), (1,3), (2,2)]
 sorted(alist_of_tuples, key=itemgetter(1,0))
 #输出: [(2, 2), (5, 2), (1, 3)]

运算符替代

对于每个运算符,例如+,都有一个对应的操作符函数(如add):

print(1 + 1)
# 输出: 2

from operator import add
print(add(1, 1))
# 输出: 2

mul乘积函数, 尽管官方文档声明此算术运算符只允许数字输入,但其实这样做是可以的:

from operator import mul

print(mul('a', 10))
# 输出: 'aaaaaaaaaa'

print(mul([3], 3))
# 输出: [3, 3, 3]

根据官方文档,具体各操作符及对应的操作函数如下

OperationSyntaxFunction
Additiona + badd(a, b)
Concatenationseq1 + seq2concat(seq1, seq2)
Containment Testobj in seqcontains(seq, obj)
Divisiona / btruediv(a, b)
Divisiona // bfloordiv(a, b)
Bitwise Anda & band_(a, b)
Bitwise Exclusive Ora ^ bxor(a, b)
Bitwise Inversion~ ainvert(a)
Bitwise Ora | bor_(a, b)
Exponentiationa ** bpow(a, b)
Identitya is bis_(a, b)
Identitya is not bis_not(a, b)
Indexed Assignmentobj[k] = vsetitem(obj, k, v)
Indexed Deletiondel obj[k]delitem(obj, k)
Indexingobj[k]getitem(obj, k)
Left Shifta << blshift(a, b)
Moduloa % bmod(a, b)
Multiplicationa * bmul(a, b)
Matrix Multiplicationa @ bmatmul(a, b)
Negation (Arithmetic)- aneg(a)
Negation (Logical)not anot_(a)
Positive+ apos(a)
Right Shifta >> brshift(a, b)
Slice Assignmentseq[i:j] = valuessetitem(seq, slice(i, j), values)
Slice Deletiondel seq[i:j]delitem(seq, slice(i, j))
Slicingseq[i:j]getitem(seq, slice(i, j))
String Formattings % objmod(s, obj)
Subtractiona - bsub(a, b)
Truth Testobjtruth(obj)
Orderinga < blt(a, b)
Orderinga <= ble(a, b)
Equalitya == beq(a, b)
Differencea != bne(a, b)
Orderinga >= bge(a, b)
Orderinga > bgt(a, b)

 

Methodcaller函数

此函数是显式调用 lambda的函数:

alist = ['wolf', 'sheep', 'duck']
print(list(filter(lambda x: x.startswith('d'), alist)))

# 只保留以“d”开头的元素 
# 输出: ['duck']


from operator import methodcaller

print(list(filter(methodcaller('startswith', 'd'), alist))) 
# 效果等价,但速度更快!
# 输出: ['duck']

上述代码在python3云环境中调试成功,请勿转载,谢谢

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值