我有字符串:
a = "ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ" b = "àáâãäèéçêëìíîïòóôõöùúûüÿ"
我想建立一个字符串
"ÀàÁáÂâ..."
即一分为二的字符串,然后将拉链半在一起。
我试过天真zip(a, b)
但这并没有工作。 我认为,这是由于使用Unicode的一个问题。
有谁知道我能得到我想要的结果呢?
我有字符串:
a = "ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ" b = "àáâãäèéçêëìíîïòóôõöùúûüÿ"
我想建立一个字符串
"ÀàÁáÂâ..."
即一分为二的字符串,然后将拉链半在一起。
我试过天真zip(a, b)
但这并没有工作。 我认为,这是由于使用Unicode的一个问题。
有谁知道我能得到我想要的结果呢?
在Python 2.x中,字符串默认不统一。 当处理unicode数据时,你必须做到以下几点:
前缀字符串常量与u
性格: a = u'ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ'
,或
如果你想避免u
前缀,如果你正在使用的模块有足够的兼容, 使用from __future__ import unicode_literals
导入作出解释为默认Unicode字符串
如果你直接在你的Python代码编写Unicode字符串, 保存.py文件在utf-8
格式 ,从而文字的正确解释。 Python的2.3+会解释UTF-8 BOM ; 一个很好的做法也是添加特定注释行 ,在该文件的开头来指示,如编码# -*- coding: utf-8 -*-
或
您还可以保持储蓄在.py文件ascii
,但你需要逃避在文字中的Unicode字符 ,这可以少读: 'ÀÁÂÃ'
应该成为'\xc0\xc1\xc2\xc3'
一旦你满足这些条件,剩下的就是关于这些Unicode字符串应用算法,你将与海峡版本相同的方式工作。 这里是你的问题与一个可能的解决方案__future__
进口:
from __future__ import unicode_literals
from itertools import chain
a = "ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ"
b = "àáâãäèéçêëìíîïòóôõöùúûüÿ"
print ''.join(chain(*zip(a,b)))
>>> ÀàÁáÂâÃãÈäÉèÊéËçÌêÍëÎìÏíÒîÓïÔòÕóÖôÙõÚöÛùÜú
更多参考:
你必须加入他们,你压缩它们之后,还需要将它们定义为unicode字符串:
>>>import itertools
>>>a = u"ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ"
>>>b = u"àáâãäèéçêëìíîïòóôõöùúûüÿ"
>>>zipped = itertools.izip_longest(a,b, fillvalue="")
>>>print "".join(["".join(x) for x in zipped])
ÀàÁáÂâÃãÈäÉèÊéËçÌêÍëÎìÏíÒîÓïÔòÕóÖôÙõÚöÛùÜúûüÿ
>>>zipped = itertools.izip_longest(a,b, fillvalue="")
>>>print "".join(map("".join, zipped))
ÀàÁáÂâÃãÈäÉèÊéËçÌêÍëÎìÏíÒîÓïÔòÕóÖôÙõÚöÛùÜúûüÿ
也许不漂亮,但工作之一。
>>> a_longer = len(a) > len(b)
>>> new_string = ""
>>> for i in range((min(len(a), len(b)))):
... new_string += a[i] + b[i]
...
>>> if a_longer:
... new_string += a[i:]
... else:
... new_string += b[i:]
...
>>> print new_string
ÀàÁáÂâÃãÈäÉèÊéËçÌêÍëÎìÏíÒîÓïÔòÕóÖôÙõÚöÛùÜúúûüÿ
或者,用拉链:
>>> a = u'ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ'
>>> b = u'àáâãäèéçêëìíîïòóôõöùúûüÿ'
>>> c = zip(a, b)
>>> new_string = "".join([a + b for a, b in c])
>>> print new_string
ÀàÁáÂâÃãÈäÉèÊéËçÌêÍëÎìÏíÒîÓïÔòÕóÖôÙõÚöÛùÜú
但要小心,一个拉链方法不会给你的“B”字符串的其余部分,因为它没有在“A”串一对。
这是工作在我身边(的Python 2.x的):
>>> a = unicode('ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ', 'utf-8')
>>> b = unicode('àáâãäèéçêëìíîïòóôõöùúûüÿ', 'utf-8')
>>> print ''.join([ ''.join(c) for c in zip(a, b)])
ÀàÁáÂâÃãÈäÉèÊéËçÌêÍëÎìÏíÒîÓïÔòÕóÖôÙõÚöÛùÜú
你有什么错误?