python中issubset是什么_Python issubset性能与在s中查找元素的比较

我已经测试了以下方法:import random

import string

def checkWord1(word):

r1 = 'qwertyuiop'

r2 = 'asdfghjkl'

r3 = 'zxcvbnm'

row = 0

for idx, ch in enumerate(word):

if idx == 0:

row = 1 if ch in r1 else 2 if ch in r2 else 3

continue

coming_row = 1 if ch in r1 else 2 if ch in r2 else 3

if row != coming_row:

return False

return True

def checkWord2(word):

r1 = 'qwertyuiop'

r2 = 'asdfghjkl'

r3 = 'zxcvbnm'

return set(word).issubset(r1) or set(word).issubset(r2) or set(word).issubset(r3)

def checkWord3(word):

r1 = 'qwertyuiop'

r2 = 'asdfghjkl'

r3 = 'zxcvbnm'

r = set(word)

return r.issubset(r1) or r.issubset(r2) or r.issubset(r3)

def checkWord4(word):

r1 = set('qwertyuiop')

r2 = set('asdfghjkl')

r3 = set('zxcvbnm')

row = 0

for idx, ch in enumerate(word):

if idx == 0:

row = 1 if ch in r1 else 2 if ch in r2 else 3

continue

coming_row = 1 if ch in r1 else 2 if ch in r2 else 3

if row != coming_row:

return False

return True

测量执行时间:

^{pr2}$

获取结果:

^{pr3}$

尽管随机生成的字符串不同,但结果相似。

一个是最快的,三个比两个更快,更稳定,四个最差。

我认为为什么一个人跑得最快的原因是^{cd1>}实际上隐式地将^{cd2>}转换为^{cd3>}。那代价很高。

这种比较不公平。假设我们有一个单词^{cd4>},在方法一中,它将检查在^{{cd5>}中,在下面的循环中,如果没有找到^{{cd5>}的子集,也不可能是其他子集。

所以我实现了一个更快的方法,我想我们可以只关注一行,这是由第一个字符决定的,因为这三行是独占的,这样我们就不再检查其他行了。

^{pr4}$

获取结果:One:

728 ns ± 236 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

Two:

2.08 µs ± 55.8 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

Three:

1.43 µs ± 60 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

Four:

1.45 µs ± 7.74 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

Five:

374 ns ± 7.01 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部