pythonpython-3.xpython-3.3subscript

Printing subscript in python


In Python 3.3, is there any way to make a part of text in a string subscript when printed?

e.g. H₂ (H and then a subscript 2)


Solution

  • If all you care about are digits, you can use the str.maketrans() and str.translate() methods:

    example_string = "A0B1C2D3E4F5G6H7I8J9"
    
    SUB = str.maketrans("0123456789", "₀₁₂₃₄₅₆₇₈₉")
    SUP = str.maketrans("0123456789", "⁰¹²³⁴⁵⁶⁷⁸⁹")
    
    print(example_string.translate(SUP))
    print(example_string.translate(SUB))
    

    Which will output:

    A⁰B¹C²D³E⁴F⁵G⁶H⁷I⁸J⁹
    A₀B₁C₂D₃E₄F₅G₆H₇I₈J₉
    

    Note that this won't work in Python 2 - see Python 2 maketrans() function doesn't work with Unicode for an explanation of why that's the case, and how to work around it.