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