python删除列表中字符串_python - 删除字符串中的字符列表

如果您正在使用python2并且您的输入是字符串(不是unicodes),那么绝对最好的方法是remove_chars_translate_bytes:

>>> chars_to_remove = ['.', '!', '?']

>>> subj = 'A.B!C?'

>>> subj.translate(None, ''.join(chars_to_remove))

'ABC'

否则,有以下选项可供考虑:

A.通过char迭代主题char,省略不需要的字符和结果列表remove_chars_translate_bytes:

>>> sc = set(chars_to_remove)

>>> ''.join([c for c in subj if c not in sc])

'ABC'

(请注意,生成器版本remove_chars_translate_bytes效率较低)。

B.动态创建正则表达式,并使用空字符串创建remove_chars_translate_bytes:

>>> import re

>>> rx = '[' + re.escape(''.join(chars_to_remove)) + ']'

>>> re.sub(rx, '', subj)

'ABC'

(remove_chars_translate_bytes确保像remove_chars_translate_bytes或]这样的字符不会破坏正则表达式)。

C.使用remove_chars_translate_bytes的映射变体:

>>> chars_to_remove = [u'δ', u'Γ', u'ж']

>>> subj = u'AжBδCΓ'

>>> dd = {ord(c):None for c in chars_to_remove}

>>> subj.translate(dd)

u'ABC'

完整的测试代码和时间:

#coding=utf8

import re

def remove_chars_iter(subj, chars):

sc = set(chars)

return ''.join([c for c in subj if c not in sc])

def remove_chars_re(subj, chars):

return re.sub('[' + re.escape(''.join(chars)) + ']', '', subj)

def remove_chars_re_unicode(subj, chars):

return re.sub(u'(?u)[' + re.escape(''.join(chars)) + ']', '', subj)

def remove_chars_translate_bytes(subj, chars):

return subj.translate(None, ''.join(chars))

def remove_chars_translate_unicode(subj, chars):

d = {ord(c):None for c in chars}

return subj.translate(d)

import timeit, sys

def profile(f):

assert f(subj, chars_to_remove) == test

t = timeit.timeit(lambda: f(subj, chars_to_remove), number=1000)

print ('{0:.3f} {1}'.format(t, f.__name__))

print (sys.version)

PYTHON2 = sys.version_info[0] == 2

print ('\n"plain" string:\n')

chars_to_remove = ['.', '!', '?']

subj = 'A.B!C?' * 1000

test = 'ABC' * 1000

profile(remove_chars_iter)

profile(remove_chars_re)

if PYTHON2:

profile(remove_chars_translate_bytes)

else:

profile(remove_chars_translate_unicode)

print ('\nunicode string:\n')

if PYTHON2:

chars_to_remove = [u'δ', u'Γ', u'ж']

subj = u'AжBδCΓ'

else:

chars_to_remove = ['δ', 'Γ', 'ж']

subj = 'AжBδCΓ'

subj = subj * 1000

test = 'ABC' * 1000

profile(remove_chars_iter)

if PYTHON2:

profile(remove_chars_re_unicode)

else:

profile(remove_chars_re)

profile(remove_chars_translate_unicode)

结果:

2.7.5 (default, Mar 9 2014, 22:15:05)

[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)]

"plain" string:

0.637 remove_chars_iter

0.649 remove_chars_re

0.010 remove_chars_translate_bytes

unicode string:

0.866 remove_chars_iter

0.680 remove_chars_re_unicode

1.373 remove_chars_translate_unicode

---

3.4.2 (v3.4.2:ab2c023a9432, Oct 5 2014, 20:42:22)

[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]

"plain" string:

0.512 remove_chars_iter

0.574 remove_chars_re

0.765 remove_chars_translate_unicode

unicode string:

0.817 remove_chars_iter

0.686 remove_chars_re

0.876 remove_chars_translate_unicode

(作为旁注,remove_chars_translate_bytes的数字可能会给我们一个线索,为什么业界不愿意长期采用Unicode)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言的格式控制符问题

写C程序遇到这样一个问题,定义了double变量,printf输出却要%f。一直以为应该用%lf,事实上VC6.0用%lf会报错。原因还要在探究。 贴吧有人说:double变量,scanf时必须用%lf,printf时要用%f或者%lf(…

php无法用mail函数发送邮件之原因

[导读]PHP 需要一个已安装且正在运行的邮件系统&#xff0c;以便使邮件函数mail()可用。所用的邮件系统程序通过在 php.ini 文件中进行设置。用如下代码发送邮件&#xff0c;可总是发送失败。 [php] view plaincopyprint? 01.<?php 02.$to "xxxxxxxxqq.com";…

Linux内核设计与实现 总结笔记(第五章)系统调用

系统调用 内核提供了用户进程和内核交互的接口&#xff0c;使得应用程序可以受限制的访问硬件设备。 提供这些接口主要是为了保证系统稳定可靠&#xff0c;避免应用程序恣意妄行。 一、内核通信 系统调用在用户空间进程和硬件设备之间添加中间才能。作用有三&#xff1a; 为用户…

爬虫软件python彻底卸载_Python爬虫实践:如何优雅地删除豆瓣小组的帖子

前言文章起源于自己的一个需求&#xff1a;想要删除掉自己的若干个小号在豆瓣小组上的发帖及回复记录。这是一件看似简单的事情&#xff0c;但是一遍一遍的重复操作实在让我感到非常绝望&#xff0c;特别是删除自己的回复时&#xff0c;有时候回复的帖子的回复有好几十页&#…

高斯卷积核如何生成 C语言实现

对于学图像专业的人来说&#xff0c;对图像进行高斯滤波应该不会陌生&#xff0c;本质上就是将图像与高斯核进行卷积。 但是高斯核是如何生成的呢。matlab中有函数能自动生成高斯卷积核&#xff1a; gsfspecial(gaussian,3,1) gs 0.0751 0.1238 0.0751 0.1238 0.…

连接MySQL数据库时常见故障问题的分析与解决

连接MySQL数据库时常见故障问题的分析与解决 初学的mysql网友好象经常会碰到mysql无法连接的错误。特开贴收集这样问题的现象和原因。 先自己扔块砖头出来。 归纳如下&#xff1a; 故障现象 : 无法连接 mysql 错误信息1 &#xff1a;ERROR 1045 (28000): Access deni…

如何判断两个平面相交_七年级下册相交线与平行线全章节复习

5.1 相交线(一)相交线两条直线相交&#xff0c;形成4个角。1、两条直线相交所成的四个角中&#xff0c;相邻的两个角叫做邻补角&#xff0c;特点是两个角共用一条边&#xff0c;另一条边互为反向延长线&#xff0c;性质是邻补角互补&#xff1b;相对的两个角叫做对顶角&#xf…

spring dao层注解_Spring– DAO和服务层

spring dao层注解欢迎来到Spring教程的第三部分。 在这一部分中&#xff0c;我们将继续编写Timesheet应用程序&#xff0c;这次我们将实现DAO层&#xff0c;业务服务并编写一些测试。 在上一部分中&#xff0c;我们定义了GenericDao接口&#xff0c;该接口告诉我们需要对实体执…

Word 2007 如何自动生成目录以及设置正文第一页?

首先&#xff0c;讲解如何生成目录。 第一步&#xff0c;设置目录的小结的题目。这个需要对一级标题&#xff0c;二级标题&#xff0c;三级标题进行设置&#xff0c;设置方法如下图所示&#xff1a; 可以点击右键&#xff0c;对标题的格式进行修改。 第二步&#xff0c;直接生成…

python 优先队列_python中使用优先队列

相信对于队列的概念大家都不会陌生&#xff0c;这种先入先出的数据结构应用很广泛&#xff0c;像一般的生产消费都会用到队列&#xff0c;关于Queue的用法介绍可以参考我之前的文章 python中的Queue与多进程&#xff08;multiprocessing&#xff09;还有栈&#xff0c;栈是一种…

JHipster入门,第2部分

所以你回来了&#xff01; 在本系列的最后一部分中 &#xff0c;我们采用了单片路线创建了一个JHipster应用程序。 这是红色药丸路线&#xff1b; 生活与您习惯的差不多。 但是也许您喜欢挑战。 也许您想超越红色药丸并尝试蓝色药丸。 在这种情况下&#xff0c;Blue Pill是微服…

由于html元素加载导致的问题

js中要求执行的事件是在完全加载完&#xff0c;但由于本地环境测试一直没发现出问题&#xff0c;在上线后由于网络延迟导致元素加载慢&#xff0c;而事件执行完&#xff0c;没达到预期目标。 这时就需要用到属性 readyState readyState 属性返回当前文档的状态&#xff08;载入…

Linux下MySQL数据库常用基本操作 一

1、显示数据库 show databases; 2、选择数据库 use 数据库名; 3、显示数据库中的表 show tables; 4、显示数据表的结构 describe 表名; 5、显示表中记录 SELECT * FROM 表名 6、建库 create databse 库名; 7、建表 create table 表名 (字段设定列表)&#xff1b;mysql> cr…

C语言读取txt文档中的数据

1.说明 txt文档中的数据格式&#xff1a;前后数据用空格隔开&#xff1b;数据来源&#xff1a;matlab读取彩图的R、G、B三层的像素值&#xff0c;分别存放在三个txt文档中&#xff0c;用C读取到一维数组。动态申请数组&#xff0c;还是需要预先知道数组的大小&#xff0c;比静态…

cpickle支持的python版本_Python序列化模块pickle和cPickle

Python的序列化是指把变量从内存中变为可以储存/传输的数据/文件的过程. 在Python中叫pickling&#xff0c;在其他语言中也被称之为serialization&#xff0c;marshalling&#xff0c;flattening等等&#xff0c;都是一个意思。序列化之后&#xff0c;就可以把序列化后的内容写…

Intellij IDEA 4种配置热部署的方法

Intellij IDEA 4种配置热部署的方法 热部署可以使的修改代码后&#xff0c;无须重启服务器&#xff0c;就可以加载更改的代码。 第1种&#xff1a;修改服务器配置&#xff0c;使得IDEA窗口失去焦点时&#xff0c;更新类和资源 菜单Run -> EditConfiguration , 然后配置指定服…

mysql启动报错:Another MySQL daemon already running with the same unix socket.

[rootlocalhost ~]#/etc/init.d/mysqld restart Stopping mysqld: [ OK ] Another MySQL daemon already running with the same unix socket. Starting mysqld: [FAILED] 原因多个Mys…

malloc申请一维动态数组的错误

正确写法&#xff1a;int *tmp ( int * )malloc( H*W*sizeof(int) ); float *tmp ( float * )malloc( H*W*sizeof(float) ); double *tmp ( double * )malloc( H*W*sizeof(double) ); 错误写法&#xff1a;double *tmp ( double * )malloc( H*W*sizeof(double * ) ); 错…

java检查注入sql框架_Java:检查器框架

java检查注入sql框架我在JavaOne 2012上 了解的有趣的工具之一是Checker Framework 。 Checker Framework的网页之一 指出 &#xff0c;Checker Framework“增强了Java的类型系统&#xff0c;使其更加强大和有用”&#xff0c;从而使软件开发人员“能够检测并防止Java程序中的错…

jqc3ff继电器引脚图_电气元件中间继电器的知识全面解读,欢迎电工朋友收藏!...

继电器(英文&#xff1a;Relay)&#xff0c;也称电驿&#xff0c;是一种电子控制器件&#xff0c;它具有控制系统(又称输入回路)和被控制系统(又称输出回路)&#xff0c;通常应用于自动控制电路中&#xff0c;它实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路…