文档章节

python中针对序列A是否包含序列B的各种处理

Listjj117
 Listjj117
发布于 2014/01/03 10:54
字数 450
阅读 41
收藏 3
#!coding=utf-8
def containsAny(seq,aset):
    """
    检查序列seq是否含有aset中的项
    """
    for item in seq:
        if item in aset:return True
    return False

import itertools
def containsAnyItertools(seq,aset):
    """
    性能好点,但是本质和contansAny一样
    """
    for item in itertools.ifilter(aset.__contains__,seq):
        return True
    return False

def containsAnySet(seq,aset):
    """
    seq中的每个元素都要检测,没有短路特性
    """
    return bool(set(aset).intersection(seq))

def containsAllSet(seq,aset):
    """
    检测seq中是否包含aset的所有项
    """
    #相当于aset - seq,返回属于aset但是不输入seq的元素.不要和symmetric_difference搞混,
    # symmetric_difference是属于一个期中一个序列,但是不属于both的元素集合,a^b
    return not set(aset).difference(seq)

import string
notrans = string.maketrans('','') #不做转换,可以将第一个参数转换为第二个参数
def containsAnyStr(seq,aset):
    return len(aset) != len(aset.translate(notrans,seq))

def containsAllStr(seq,aset):
    return not aset.translate(notrans,seq) # 利用translate将aset中的与seq的项相同的项删掉

def translator(fm='',to='',delete='',keep=None):
    """
    简化tring.translate的使用
    translate 比set方式快,但是不使用unicode
    """
    if len(to) == 1:to = to*len(fm)
    trans = string.maketrans(fm,to)
    if keep != None:
        allchars = string.maketrans('','') #返回经过转换后的256个可打印字符组成的string
        delete = allchars.translate(allchars,keep.translate(allchars,delete)) #得到根据需要保留的keep计算后需要删除的项
    def translate(s):
        return s.translate(trans,delete)
    return translate


class Keeper(object):
    """
    For Unicode objects, the translate() method does not accept the optional
    deletechars argument. Instead, it returns a copy of the s where all characters
    have been mapped through the given translation table which must be a mapping of Unicode
    ordinals to Unicode ordinals, Unicode strings or None. Unmapped characters are left untouched.
    Characters mapped to None are deleted
    """
    def __init__(self,keep):
        self.keep = set(map(ord,keep))
    def __getitem__(self, item): #对该类的对象执行索引的时候调用
        if item not in self.keep:
            return None
        return unichr(item)
    def __call__(self, s):
        return unicode(s).translate(self)


© 著作权归作者所有

共有 人打赏支持
Listjj117
粉丝 0
博文 2
码字总数 582
作品 0
海淀
私信 提问
编程入门13:Python文本处理

上一篇:编程入门12:Python异常处理 计算机经常需要对文本进行各种操作,我们知道Python语言表示文本的类型是字符串(str),其中可以包含任何字符。系统内部以标准的“统一码”(Unicode)...

starglow_leo
06/19
0
0
完美Python入门基础知识点总结,看完你的Python就完全入门了!

Python标识符 在 Python 里,标识符有字母、数字、下划线组成。 在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。 Python 中的标识符是区分大小写的。 以下划线...

糖宝lsh
08/16
0
0
一张图认识Python(附基本语法总结)

一张图带你了解Python,更快入门, 视频介绍>>>> 简单学Python安全简单学Python安全">http://edu.51cto.com/center/course/lesson/index?id=263601)简单学Python安全 Python基础语法总结: ......

安全牛课堂
05/22
0
0
CRUD并不易-- --谈微服务中的序列化场景

在上一篇文章中说到了验参,现在接着说另一个微服务中的工程性问题,序列化。 作为编写业务的程序员,常被戏称为CRUD程序写,会增删改查,给个if else给个for就能混碗饭吃。此话倒不假。 在面...

古二白
08/19
0
0
zg手册 之 python2.7.7源码分析(4)-- pyc字节码文件

什么是字节码 python解释器在执行python脚本文件时,对文件中的python源代码进行编译,编译的结果就是byte code(字节码) python虚拟机执行编译好的字节码,完成程序的运行 python会为导入的模...

东昕
2014/09/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周三乱弹 —— 你是靠自己努力才失败的

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 小小编辑:推荐歌曲 《Raveena》- Raveena 《Raveena》- Raveena 手机党少年们想听歌,请使劲儿戳(这里) 11月18日,俞敏洪在某论坛演讲中称...

小小编辑
55分钟前
313
7
firewalld

1. firewalld 是什么 CentOS中默认是有 firewalld, iptables, etablesd firewalld 是 CentOS7/RadHat7 中默认的防火墙管理工具. firewalld 工具用来管理里netfilter, 不过底层还是调用的还是...

Fc丶
今天
4
0
Java 源代码和 C 源代码的运行区别

与其他程序的执行方式和编译方式不同。 Java 源代码需要进行编译成字节码后在 Java 虚拟机上运行,这样 Java 程序能够保持独立性和跨平台功特性。 请参考下图。 https://www.cwiki.us/pages...

honeymose
今天
6
0
Apache限定目录解析PHP,限制user_agent,PHP相关的配置

Apache限定目录解析PHP 配置前访问upload/index.php [root@test-a ~]# curl -x192.168.77.139:80 'www.test.com/upload/index.php'This is upload diretory 配置,/usr/local/apache2.4/......

野雪球
今天
6
0
java.util.Concurrent.Exchanger源码

类图 源码: package java.util.concurrent;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.atomic.AtomicReference;import java.util.concurrent......

狼王黄师傅
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部