python搜索文本内容_Python文本搜索问题

让我们来看看…

return [x for x in document.split()

if 'a' in x and sum((1 if y in 'abcdef' else 0 for y in x)) >= 3]

没有参数的split作为“单词”函数,在任何空格上拆分并删除不包含字符的单词.然后检查字母’a’是否在单词中.如果单词中有’a’,则使用生成器表达式,该表达式遍历单词中的每个字母.如果字母在可用字母串内,则返回1,该值对总和有贡献.否则,它返回0.然后如果总和是3或更大,它保持它.使用生成器而不是列表推导,因为sum将接受任何可迭代的内容,并且它会阻止必须创建临时列表(更少的内存开销).

它没有最佳的访问时间,因为使用in(在字符串上应该有一个O(n)时间),但这通常不是一个非常大的问题,除非数据集很大.你可以优化一点来将字符串打包成一个集合,常量’abcdef’可以很容易地成为一个集合.我只是不想破坏漂亮的一个班轮.

编辑:哦,为了改善if部分的时间(这是低效率的地方),你可以把它分成一个迭代字符串一次的函数,如果满足条件则返回True.我会这样做,但它毁了我的一个班轮.

编辑2:我没有看到“必须有3个不同的角色”部分.你不能在一个班轮里做到这一点.你可以把if部分带到一个函数中.

def is_valid(word, chars):

count = 0

for x in word:

if x in chars:

count += 1

chars.remove(x)

return count >= 3 and 'a' not in chars

def parse_document(document):

return [x for x in document.split() if is_valid(x, set('abcdef'))]

这个不应该对现实世界的数据集有任何性能问题.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值