6

数値文字列を上付き文字に変換する必要がありますが、それを行うより良い (組み込みの) 方法はありますか?

def to_sup(s):
    sups={u'1': u'\xb9', 
          u'0': u'\u2070',
          u'3': u'\xb3', 
          u'2': u'\xb2',
          u'5': u'\u2075',
          u'4': u'\u2074',
          u'7': u'\u2077',
          u'6': u'\u2076',
          u'9': u'\u2079',
          u'8': u'\u2078'}
    if s.isdigit():
        return ''.join([sups[i] for i in s])
print to_sup('0123')

出力:

⁰¹²³
4

1 に答える 1

9

あなたのやり方は少し間違っています。より良いでしょう:

def to_sup(s):
    sups = {u'0': u'\u2070',
            u'1': u'\xb9',
            u'2': u'\xb2',
            u'3': u'\xb3',
            u'4': u'\u2074',
            u'5': u'\u2075',
            u'6': u'\u2076',
            u'7': u'\u2077',
            u'8': u'\u2078',
            u'9': u'\u2079'}

    return ''.join(sups.get(char, char) for char in s)  # lose the list comprehension

s.isdigit()最初の文字のみをチェックしますが、これはおそらく意味がありません。

何らかの理由でワンライナーが必要な場合:

u''.join(dict(zip(u"0123456789", u"⁰¹²³⁴⁵⁶⁷⁸⁹")).get(c, c) for c in s)
于 2012-12-14T09:16:19.240 に答える