Изменение части строки на индекс - PullRequest
2 голосов
/ 18 января 2020

У меня есть список строк, которые я хочу разместить в подписках '_Octa', '_Tet' и т. Д.

original = ['VO₆_Octa', 'FeO₄_Tet', 'FeO₆_Oct', 'BaO₉_Tsf', 'PrO₆_Oct', 'CaO₆_Oct',
       'HgO₂_Lin', 'CrO₆_Oct', 'AgO₄_Tet', 'EuO₉_Tsf']

То, что я хочу, опубликовано на скриншоте

enter image description here

У меня есть сотни таких строк в списке. Что касается чисел, я нашел много таких ответов, и я могу применить и в моем случае. Есть ли лучший способ сделать это для таких строк? Любая помощь или указатели на подобные проблемы были бы великолепны.

1 Ответ

0 голосов
/ 18 января 2020

Используйте их!

SUB = 
str.maketrans("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_", 
"₀₁₂₃₄₅₆₇₈₉ₐᵦ??ₑfgₕᵢⱼₖₗₘₙₒₚqᵣₛₜᵤᵥwₓyz??????????????????????????₋")


SUP = 
str.maketrans("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_", 
"⁰¹²³⁴⁵⁶⁷⁸⁹ᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖᵠʳˢᵗᵘᵛʷˣʸᶻᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖᵠʳˢᵗᵘᵛʷˣʸᶻ‾")

Вот код:

original = ['VO₆_Octa', 'FeO₄_Tet', 'FeO₆_Oct', 'BaO₉_Tsf', 'PrO₆_Oct', 'CaO₆_Oct',
   'HgO₂_Lin', 'CrO₆_Oct', 'AgO₄_Tet', 'EuO₉_Tsf']

SUB = 
str.maketrans("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_", 
"₀₁₂₃₄₅₆₇₈₉ₐᵦ??ₑfgₕᵢⱼₖₗₘₙₒₚqᵣₛₜᵤᵥwₓyz??????????????????????????₋")


SUP = 
str.maketrans("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_", 
"⁰¹²³⁴⁵⁶⁷⁸⁹ᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖᵠʳˢᵗᵘᵛʷˣʸᶻᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖᵠʳˢᵗᵘᵛʷˣʸᶻ‾")

new = []

for item in original:
    x = item.split('_')
    new.append(x[0] + "₋" + x[1].translate(SUB))

print(new) 

Как вы могли заметить, некоторые буквы на самом деле не конвертируются должным образом в нижний регистр. Это связано с тем, что алфавиты для нижнего и верхнего индексов на самом деле не существуют как правильный алфавит в Юникоде. Я использовал различные онлайн-конвертеры и мог получать только те преобразования букв, которые вы видите выше (ie: исключая строчные b, c, d, f, g, q, w, y, z).

Однако, на мой взгляд, лучший способ сделать это - отформатировать строку на каком-то языке разметки (HTML, Latex et c). Вам придется использовать простые теги <sub></sub> и <sup></sup> в HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...