二十、python 字符串去重,主要依赖maketrans和translate这两个方法
2018-02-28 16:19
441 查看
最近遇到一个问题,怎么来对一个字符串去重?
我的思路是1.先分割字符串;2.然后使用set去重;3.用join连接起来。
那就引入了另一个问题:怎么分割字符串来保证结果中不包含空格?当然有很笨的方法,本篇主要谈论有没有一种更简单的方法?
首先,先来看一下需要分割的字符串
接下来,按照常规的方法,使用str.split()或re.split()分割并组合字符串
输出结果:
可以看到分割结果中包含空格,直接影响了最后的结果。如果想保证结果正确,一种方法是:在拆分前去掉bbb开头和结尾的“;”;一种方法是去掉ccc中的空格元素。两种方法都需要写多余的代码,不符合python,大道至简的思想,^_^
下面看一下,比较简便的解决方法
输出结果:
需要注意的是,在python 2.X中,如果bbb为unicode执行 ccc = bbb.translate(table)会抛出以下异常
TypeError: character mapping must return integer, None or unicode
需要转码为str才可以,在python3.x中没有这个问题。
参考文档:
http://blog.csdn.net/luke2834/article/details/54588231
http://www.jb51.net/article/66353.htm
http://blog.csdn.net/vickyrocker1/article/details/50952095
https://stackoverflow.com/questions/20849805/python-hmac-typeerror-character-mapping-must-return-integer-none-or-unicode
我的思路是1.先分割字符串;2.然后使用set去重;3.用join连接起来。
那就引入了另一个问题:怎么分割字符串来保证结果中不包含空格?当然有很笨的方法,本篇主要谈论有没有一种更简单的方法?
首先,先来看一下需要分割的字符串
# 张三;李四;王五;张三;李四 bbb = u';\u5f20\u4e09;\u674e\u56db;\u738b\u4e94;\u5f20\u4e09;\u674e\u56db;'
接下来,按照常规的方法,使用str.split()或re.split()分割并组合字符串
print 'bbb: %s' % bbb ccc = bbb.split(';') print 'ccc: %s' % ccc print 'remove duplicate: %s' % set(ccc) print 'concat str: %s' % ';'.join(set(ccc))
输出结果:
bbb: ;张三;李四;王五;张三;李四; ccc: [u'', u'\u5f20\u4e09', u'\u674e\u56db', u'\u738b\u4e94', u'\u5f20\u4e09', u'\u674e\u56db', u''] remove duplicate: set([u'', u'\u5f20\u4e09', u'\u674e\u56db', u'\u738b\u4e94']) concat str: ;张三;李四;王五
可以看到分割结果中包含空格,直接影响了最后的结果。如果想保证结果正确,一种方法是:在拆分前去掉bbb开头和结尾的“;”;一种方法是去掉ccc中的空格元素。两种方法都需要写多余的代码,不符合python,大道至简的思想,^_^
下面看一下,比较简便的解决方法
from string import maketrans print 'bbb: %s' % bbb table = maketrans(';', ' ') ccc = bbb.encode('utf-8').translate(table) ccc = ccc.decode('utf-8') print 'ccc: %s' % ccc print 'split ccc: %s' % ccc.split() l = set(ccc.split()) print 'remove duplicate: %s' % l print 'concat str: %s' % ';'.join(l)
输出结果:
bbb: ;张三;李四;王五;张三;李四; ccc: 张三 李四 王五 张三 李四 split ccc: [u'\u5f20\u4e09', u'\u674e\u56db', u'\u738b\u4e94', u'\u5f20\u4e09', u'\u674e\u56db'] remove duplicate: set([u'\u5f20\u4e09', u'\u674e\u56db', u'\u738b\u4e94']) concat str: 张三;李四;王五
需要注意的是,在python 2.X中,如果bbb为unicode执行 ccc = bbb.translate(table)会抛出以下异常
TypeError: character mapping must return integer, None or unicode
需要转码为str才可以,在python3.x中没有这个问题。
参考文档:
http://blog.csdn.net/luke2834/article/details/54588231
http://www.jb51.net/article/66353.htm
http://blog.csdn.net/vickyrocker1/article/details/50952095
https://stackoverflow.com/questions/20849805/python-hmac-typeerror-character-mapping-must-return-integer-none-or-unicode
相关文章推荐
- Python——maketrans和translate方法,可以用来从string中替换和删除字符
- Python——maketrans和translate方法,可以用来从string中替换和删除字符
- Python——maketrans和translate方法,可以用来从string中替换和删除字符
- 闭包在python中的应用,translate和maketrans方法详解
- 【python cookbook】简化字符串的translate 方法的使用
- Python 基础——字符串maketrans(),translate()
- Python 3.x 字符串的makestrans函数和translate方法使用详解
- Python——maketrans和translate方法到底是什么玩意儿
- Python简单实现两个任意字符串乘积的方法示例
- Python——maketrans和translate方法到底是什么玩意儿
- Python——maketrans和translate方法
- Python——maketrans和translate方法,可以用来从string中替换和删除字符
- python---语句与数据结构应用,迭代、迭代字典、字典排序、字典根据键值查找键、sorted排序方法、translate与maketrans、with语句
- python实现查找两个字符串中相同字符并输出的方法
- Python——maketrans和translate方法
- Python中的两个方法string.maketrans()和string.translate()
- python连接两个字符串的另外两种高效率的方法
- python实现求两个字符串的最长公共子串方法
- Python 基础——字符串maketrans(),translate()
- Python Cookbook 第二版 汉化版 [Recipe 1.9] 简化字符串 translate 方法的用法