zoukankan      html  css  js  c++  java
  • Python美味食谱:1.8 检测字符串中是否包含某字符集合中的字符

    目的

      检测字符串中是否包含某字符集合中的字符

    方法

      最简洁的方法如下,清晰,通用,快速,适用于任何序列和容器

    def containAny(seq,aset):
        
    for c in seq:
             
    if c in aset:
                    
    return True
        
    return False

          第二种适用itertools模块来可以提高一点性能,本质上与前者是同种方法(不过此方法违背了Python的核心观点:简洁,清晰)

    itertools.ifilter(predicate, iterable)的说明

    Make an iterator that filters elements from iterable returning only those for which the predicate is True. If predicate is None, return the items that are true.

    例如:

    ifilter(lambda x: x%2, range(10)) --> 1 3 5 7 9

     import itertools

    def  containAny(seq,aset):

         
    for item in itertools.ifilter(aset.__contain__,seq):

               
    return True

         
    return False

    如果要检测两个字符串是否为包含关系,此时必须检查所有子项,最好适用set类型,其中set(aset).difference(seq)是指存在于aset中而seq没有的元素:

    def  containAll(seq,aset):
          
    return not set(aset).difference(seq)

    例如下面这个例子:

    In [4]: L1=[1,2,3,4]

    In [
    5]: L2=[1,4,3,1]

    In [
    6]: containAll(L1,L2)
    Out[
    6]: True

    In [
    7]: containAll(L2,L1)
    Out[
    7]: False

    注意一下,set.symmetric_difference是指两个集合独有的元素

    In [9]: L2=[3,2,4,5]
    In [10]: x=set(L1)
    In [
    11]: x.symmetric_difference(L2)
    Out[
    11]: set([15])
  • 相关阅读:
    【HDU6609】Find the answer【线段树】
    【HDU6602】Longest Subarray【线段树+分治】
    PCIe
    NVMe Windows 支持情况
    PCIe/NVMe Soft Protocol Analyzer
    I am coming..
    hibernate自动建表技术_采用数据库反向生成技术
    struts2的执行流程
    oracle中scott用户下四个基本表SQL语句练习
    SQL语句中的having和where的区别
  • 原文地址:https://www.cnblogs.com/yuxc/p/2132553.html
Copyright © 2011-2022 走看看