#python #string #list
#python #строка #Список
Вопрос:
Мне нужно разделить строку на две части. Если строка не содержит разделителя, мне нужна вторая строка None
. Следующий код работает, но кажется слишком подробным для того, что он делает. Есть ли более элегантный способ сделать это?
def splitter(item):
elements = item.split('_')
first = elements[0]
if len(elements) == 1:
elements.append(None)
second = elements[1]
return first, second
mylist = ['do_this', 'do_that', 'do_somethingelse', 'stayput', 'sleep']
for item in mylist:
print(splitter(item))
# Output:
# ('do', 'this')
# ('do', 'that')
# ('do', 'somethingelse')
# ('stayput', None)
# ('sleep', None)
Ответ №1:
Ваш код кажется нормальным.
Вы могли бы сделать это :
def splitter(item, delimiter):
if delimiter in item:
return tuple(item.split(delimiter))
else:
return (item, None)
mylist = ['do_this', 'do_that', 'do_somethingelse', 'stayput', 'sleep']
for item in mylist:
print(splitter(item, "_"))
Кстати, вы на 100% уверены, что в ваших строках будет только один «_»?
Комментарии:
1. Большое спасибо. Я надеялся, что для этого будет однострочный вариант, но ваше предложение короче и намного приятнее, несмотря ни на что. Кстати, да, там только одно подчеркивание.
Ответ №2:
Вы также можете попробовать
def splitter(item):
parts = item.split('_')
return parts [None] * (2 - len(parts))
Ответ №3:
Вот достаточно простая однострочная строка для каждого элемента в списке:
mylist = ['do_this', 'do_that', 'do_somethingelse', 'stayput', 'sleep']
for item in mylist:
item_1, item_2 = item.split('_')[0], item.split('_')[1] if len(item.split('_')) != 1 else None
print(item_1, item_2)
#Output:
#do this
#do that
#do somethingelse
#stayput None
#sleep None
Вот полная однострочная строка для всего списка, которая помещает каждую пару в кортеж в списке:
newlist = [(item.split('_')[0], item.split('_')[1] if len(item.split('_')) != 1 else None) for item in mylist]
#Output:
#[('do', 'this'), ('do', 'that'), ('do', 'somethingelse'), ('stayput', None), ('sleep', None)]
Должно быть достаточно легко изменить их, чтобы выходные данные были в нужном вам формате (список, кортеж и т. Д.).