私は文字列を持っています:
a = "ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ" b = "àáâãäèéçêëìíîïòóôõöùúûüÿ"
文字列を作成したい
"ÀàÁáÂâ..."
つまり、ひもを 2 つに分割し、半分を一緒に圧縮します。
私は単純に試しましたzip(a, b)
が、これはうまくいきませんでした。これはユニコードの問題によるものだと思います。
私が望む結果を得る方法を知っている人はいますか?
私は文字列を持っています:
a = "ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ" b = "àáâãäèéçêëìíîïòóôõöùúûüÿ"
文字列を作成したい
"ÀàÁáÂâ..."
つまり、ひもを 2 つに分割し、半分を一緒に圧縮します。
私は単純に試しましたzip(a, b)
が、これはうまくいきませんでした。これはユニコードの問題によるものだと思います。
私が望む結果を得る方法を知っている人はいますか?
Python 2.x では、文字列はデフォルトで Unicode ではありません。Unicode データを扱うときは、次のことを行う必要があります。
文字列リテラルのプレフィックスu
: a = u'ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ'
、または
プレフィックスを避けたいu
場合、および使用しているモジュールに十分な互換性がある場合は、インポートを使用from __future__ import unicode_literals
して、文字列リテラルをデフォルトで Unicode として解釈するようにします。
Unicode 文字列リテラルを Python コードに直接記述する場合は、リテラルが正しく解釈される形式で .py ファイルを保存してください。utf-8
Python 2.3+ はutf-8 BOMを解釈します。、または_ # -*- coding: utf-8 -*-
_
.py ファイルを に保存し続けることもできますが、リテラル内の Unicode 文字ascii
をエスケープする必要があるため、読みにくくなる可能性があります。'ÀÁÂÃ'
'\xc0\xc1\xc2\xc3'
これらの条件を満たせば、残りは、str バージョンで作業するのと同じ方法で、これらの Unicode 文字列にアルゴリズムを適用することです。__future__
インポートに関する問題の解決策の 1 つを次に示します。
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
ÀàÁáÂâÃãÈäÉèÊéËçÌêÍëÎìÏíÒîÓïÔòÕóÖôÙõÚöÛùÜú
ただし、「a」文字列にペアがないため、zip メソッドでは残りの「b」文字列が得られないことに注意してください。
これは私の側で機能しています(Python 2.x):
>>> a = unicode('ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ', 'utf-8')
>>> b = unicode('àáâãäèéçêëìíîïòóôõöùúûüÿ', 'utf-8')
>>> print ''.join([ ''.join(c) for c in zip(a, b)])
ÀàÁáÂâÃãÈäÉèÊéËçÌêÍëÎìÏíÒîÓïÔòÕóÖôÙõÚöÛùÜú
どのようなエラーがありますか?