如果您正在使用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)。

python删除列表中字符串_python - 删除字符串中的字符列表相关推荐

  1. python中return输出字符串_python基础——字符串

    Python 字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可.例如: var1 = 'Hello W ...

  2. python依次输入输出字符串_Python练习:输入一个字符串并输出该字符串中所有字符的组合,python...

    题目 输入一个字符串,输出该字符串中字符的所有组合.例如abc,它的组合有a.b.c.ab.ac.bc.abc. 第一种思路 使用递归求解,可以考虑长度为n的字符串中m个字符的组合,设为C(n, m) ...

  3. python无效的类字符串_Python基础-字符串处理

    ​你好,我是goldsunC 让我们一起进步吧! 字符串操作与处理 字符串是编程语言中经常会遇见的东西,而字符串又和那些编程语句什么的不太一样,我们可能需要对一个字符串进行各种各样的处理,后面我将给出 ...

  4. 用python倒序输出一个字符串_Python 反转字符串(reverse)的方法小结

    前段时间看到letcode上的元音字母字符串反转的题目,今天来研究一下字符串反转的内容.主要有三种方法: 1.切片法(最简洁的一种) #切片法 def reverse1(): s=input(&quo ...

  5. python删除空值的行_python删除列为空的行的实现方法

    python删除列为空的行的实现方法 发布时间:2020-07-17 17:26:54 来源:亿速云 阅读:112 作者:小猪 这篇文章主要讲解了python删除列为空的行的实现方法,内容清晰明了,对 ...

  6. python字符串_python的字符串怎么拼接

    Python字符串拼接数字 在某些特殊场景中,我们需要将字符串与数字进行拼接,而 Python 不允许直接拼接数字和字符串,程序必须先将数字转换成字符串. 为了将数字转换成字符串,可以使用 str() ...

  7. python利用字典实现大侠_python实现字符串和字典的转换

    一.把一个字符串的内容提取出来,并放到字典中 流程如下: 1.得到字符串s,通过分割提取得到s1(是个列表) s="name=lyy&age=3&sex=women& ...

  8. 以30字符宽居中输出python字符串_python基础--字符串

    Python3 字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号(' 或" )来创建字符串. 创建字符串很简单,只要为变量分配一个值即可.例如: var1 = 'Hell ...

  9. python删除一列数据_python删除txt第一列数据库

    带你读<Python数据分析与数据化运营(第2版)>之一:Python和数据化运营 点击查看第二章点击查看第三章Python数据分析与数据化运营(第2版) 宋天龙 著 第1章 Python ...

  10. python删除某列数据_python删除txt第一列数据库

    带你读<Python数据分析与数据化运营(第2版)>之一:Python和数据化运营 点击查看第二章点击查看第三章Python数据分析与数据化运营(第2版) 宋天龙 著 第1章 Python ...

最新文章

  1. grub4dos初级教程-入门篇
  2. [Splay][线段树] jzoj P5662 尺树寸泓
  3. qt linux 国际化,多语言,配置CLion管理Qt项目国际化支持
  4. coding4fun比赛总结
  5. [转载] Python字符串:大写 str.upper()
  6. nginx优化--突破十万并发
  7. 一个例子说明数据库union all的作用
  8. android毕业论文结论,毕业论文经典结束语
  9. MySQL时区问题(与北京时间相差13小时)-- mybatisplus使用LocalDateTime.now()获取系统当前时间问题
  10. PMP|项目管理过程中,怎么识别风险?
  11. stm32h7内存分配_【STM32H7教程】第9章 STM32H7重要知识点数据类型,变量和堆栈...
  12. php开启sockets模块,php开启php_sockets扩展
  13. java判断txt文件的编码格式
  14. 计算机怎样打开鼠标点的键盘,如何打开计算机虚拟键盘?五种打开计算机虚拟键盘的方法简介...
  15. 北邮803考研经验杂谈
  16. 可视化项目使用vw/vh布局进行适配
  17. Linux攻关之基础模块十 特殊权限
  18. 斐波拉契数列 Java三种实现
  19. 【面试】2019.7.10京东校招提前批
  20. taobao.item_sku获取sku详细信息 API接口的调用

热门文章

  1. csp真题字符串匹配c语言,CCF CSP认证考试历年真题 模板生成系统 C语言实现
  2. 串口服务器常见异常情况排除方法介绍
  3. 物联网应用:蓝牙模块在智能门锁中的应用
  4. android listview 去掉水波纹效果_CocosCreator之分层管理的ListView
  5. jaVa游戏三国志英杰传,《三国志英杰传》到底是怎样的一款游戏
  6. icom对讲机写频线定义_小米对讲机Lite体验:小米全新5公里无网络免费通话神器...
  7. 导数,微分,偏导,全微分,方向导数,梯度
  8. TP、PHP同域不同子级域名共享Session、单点登录
  9. [小米OJ] 4. 最长连续数列
  10. 记录一次Oracle注入绕waf