二十、python 怎么分割字符串,保证结果中不含有空格

2018-03-01 11:05:13来源:oschina作者:ssshen人点击

分享

最近遇到一个问题,怎么来对一个字符串去重?
我的思路是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

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台