我有字符串:
a = "ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ" b = "àáâãäèéçêëìíîïòóôõöùúûüÿ"
我想创建字符串
"ÀàÁáÂâ..."
即把绳子分成两半,然后把两半拉在一起。
我尝试了天真zip(a, b)
,但这没有用。我认为这是由于 unicode 的问题。
有谁知道我怎样才能得到我想要的结果?
我有字符串:
a = "ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ" b = "àáâãäèéçêëìíîïòóôõöùúûüÿ"
我想创建字符串
"ÀàÁáÂâ..."
即把绳子分成两半,然后把两半拉在一起。
我尝试了天真zip(a, b)
,但这没有用。我认为这是由于 unicode 的问题。
有谁知道我怎样才能得到我想要的结果?
在 Python 2.x 中,字符串默认不是 unicode。在处理 unicode 数据时,您必须执行以下操作:
带有字符的前缀字符串文字u
:a = u'ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ'
,或
如果您想避免使用u
前缀并且您正在使用的模块足够兼容,请使用from __future__ import unicode_literals
import将字符串文字默认解释为 unicode
如果您直接在 Python 代码中编写 unicode 字符串文字,请将 .py 文件保存为utf-8
格式,以便正确解释文字。Python 2.3+ 将解释utf-8 BOM;一个好的做法是在文件的开头添加一个特定的注释行# -*- coding: utf-8 -*-
来指示编码,或者
您也可以继续将 .py 文件保存在 中ascii
,但您需要转义文字中的 unicode 字符,这可能不太可读:'ÀÁÂÃ'
应该变成'\xc0\xc1\xc2\xc3'
一旦满足了这些条件,剩下的就是对这些 unicode 字符串应用算法,就像使用 str 版本一样。__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
ÀàÁáÂâÃãÈäÉèÊéËçÌêÍëÎìÏíÒîÓïÔòÕóÖôÙõÚöÛùÜúúûüÿ
或者,使用 zip:
>>> a = u'ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ'
>>> b = u'àáâãäèéçêëìíîïòóôõöùúûüÿ'
>>> c = zip(a, b)
>>> new_string = "".join([a + b for a, b in c])
>>> print new_string
ÀàÁáÂâÃãÈäÉèÊéËçÌêÍëÎìÏíÒîÓïÔòÕóÖôÙõÚöÛùÜú
但请注意,zip 方法不会为您提供 'b' 字符串的其余部分,因为它在 'a' 字符串中没有一对。
这对我有用(Python 2.x):
>>> a = unicode('ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ', 'utf-8')
>>> b = unicode('àáâãäèéçêëìíîïòóôõöùúûüÿ', 'utf-8')
>>> print ''.join([ ''.join(c) for c in zip(a, b)])
ÀàÁáÂâÃãÈäÉèÊéËçÌêÍëÎìÏíÒîÓïÔòÕóÖôÙõÚöÛùÜú
你有什么错误?