Как добавить двоеточие после каждых двух символов в строке

У меня есть такой список:

list1 = [ '000c.29e6.8fa5', 'fa16.3e9f.0c8c', 'fa16.3e70.323b' ]

Я собираюсь преобразовать их в mac-адреса в формате 00:0C:29:E5:8F:A5 в верхнем регистре.

Как мне это сделать?

Я погуглил, но ничего не нашел. Я тоже думал как сделать, но пока понятия не имею.

Я знаю только это:

for x in list1:
  x = x.replace('.', '').upper()[::1]

Я знаю [::1] шпагат, но не уверен, правильно ли это и смогу ли я продолжать это делать или нет.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
89
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать join() и range():

def get_converted(L):
    res = []
    for s in L:
        s = s.replace('.', '').upper()
        res += [':'.join([s[i:i + 2] for i in range(0, 12, 2)])]
    return res


print(get_converted(['000c.29e6.8fa5', 'fa16.3e9f.0c8c', 'fa16.3e70.323b']))

Принты

['00:0C:29:E6:8F:A5', 'FA:16:3E:9F:0C:8C', 'FA:16:3E:70:32:3B']
Ответ принят как подходящий

Другой способ, используя bytes.fromhex() и bytes.hex():

>>> [":".join(bytes([b]).hex() for b in bytes.fromhex(l.replace(".", ""))) for l in list1]
['00:0c:29:e6:8f:a5', 'fa:16:3e:9f:0c:8c', 'fa:16:3e:70:32:3b']

Естественно, если вам нужны заглавные буквы, добавьте их в конце.

>>> [":".join(bytes([b]).hex() for b in bytes.fromhex(l.replace(".", ""))).upper() for l in list1]
['00:0C:29:E6:8F:A5', 'FA:16:3E:9F:0C:8C', 'FA:16:3E:70:32:3B']

Другой шестнадцатеричный способ:

[bytes.fromhex(s.replace('.', '')).hex(':').upper()
 for s in list1]

Попробуйте это онлайн!

Другие вопросы по теме