Как дополнить число ведущими нулями в середине строки? - PullRequest
2 голосов
/ 10 ноября 2019

Пример списка может быть таким:

   Name
   KOI-234
   KOI-123
   KOI-3004
   KOI-21
   KOI-4325

, и я просто хочу, чтобы все эти числа имели как минимум 4 символа, поэтому это будет выглядеть так:

   Name
   KOI-0234
   KOI-0123
   KOI-3004
   KOI-0021
   KOI-4325

Я уже пробовал этот код, но, думаю, он читает часть «KOI» как не число и не добавляет нули.

first_list = db['Name']
second_list = []
for pl in first_list:
    second_list.append(pl.zfill(4))

Итак, как мне этого добиться?

Ответы [ 3 ]

0 голосов
/ 11 ноября 2019

Вы можете использовать спецификации формата :

lst = ['KOI-234', 'KOI-123', 'KOI-3004', 'KOI-21', 'KOI-4325']

['{}-{:0>4}'.format(*i.split('-')) for i in lst]
# ['KOI-0234', 'KOI-0123', 'KOI-3004', 'KOI-0021', 'KOI-4325']

Если вы хотите удалить начальные нули:

[f'{i}-{int(j)}' for i, j in map(lambda x: x.split('-'), lst)]
0 голосов
/ 11 ноября 2019

Это не добавляет нули, потому что каждый элемент / имя уже имеет более 4 символов. Вы можете попробовать использовать регулярные выражения:

import re

my_list = ['KOI-123', 'KOI-3004', 'KOI-21']
pattern = r'(?<=-)\w+'  # regex to capture the part of the string after the hyphen

for pl in my_list: 
     match_after_dash = re.search(pattern, pl)    # find the matching object after the hyphen
     pl = 'KOI-' + match_after_dash.group(0).zfill(4)    # concatenate the first (fixed?) part of  string with the numbers part
     print(pl)  # print out the resulting value of a list element
0 голосов
/ 10 ноября 2019

Вы можете использовать str.split:

n, *d = ['Name', 'KOI-234', 'KOI-123', 'KOI-3004', 'KOI-21', 'KOI-4325']
result = [n, *[f'{a}-{b.zfill(4)}' for a, b in map(lambda x:x.split('-'), d)]]

Вывод:

['Name', 'KOI-0234', 'KOI-0123', 'KOI-3004', 'KOI-0021', 'KOI-4325']

И если вы хотите вычислить значение смещения в общем:

n, *d = ['Name', 'KOI-234', 'KOI-123', 'KOI-3004', 'KOI-21', 'KOI-4325']
_d = [i.split('-') for i in d]
offset = max(map(len, [b for _, b in _d]))
result = [n, *[f'{a}-{b.zfill(offset)}' for a, b in _d]]

Выход:

['Name', 'KOI-0234', 'KOI-0123', 'KOI-3004', 'KOI-0021', 'KOI-4325']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...