Я пытался найти более универсальное исправление для своего кода и с трудом с этим справлялся. Вот что у меня есть:
lst = ['Thursday, June ##', 'some string', 'another string', 'etc', 'Friday, June ##', 'more strings', 'etc']
Я пытаюсь удалить все после запятой в строках, содержащих запятые (это могут быть только строки дня недели).
Мое текущее исправление, которое работает:
new_lst = [x[:-9] if ',' in x else x for x in lst]
Но это не будет работать для каждого месяца, так как они не всегда будут строкой из 4 букв («Июнь»). Я пытался разделить запятые, а затем удалить любую строку, начинающуюся с пробела, но она не работала должным образом, поэтому я не уверен, что делаю неправильно.
Мы можем использовать понимание списка вместе с split()
здесь:
lst = ['Thursday, June ##', 'some string', 'another string', 'etc', 'Friday, June ##', 'more strings', 'etc']
output = [x.split(',', 1)[0] for x in lst]
print(output)
# ['Thursday', 'some string', 'another string', 'etc', 'Friday', 'more strings', 'etc']
split()
возвращает список, поэтому [0]
является первым элементом в этом списке.
С regex
:
>>> import re
>>> lst = [re.sub(r',.*', '', x) for x in lst]
>>> lst
['Thursday,', 'some string', 'another string', 'etc', 'Friday,', 'more strings', 'etc']
Однако это медленнее, чем ответ split
О, спасибо! Я на самом деле пытаюсь удалить запятую, как бы я изменил ее для этого? Не знаком с регулярным выражением
@bluetortuga, исправлено. Второй аргумент re.sub
— это значение замены. Это уже ничего, так что запятую сниму
Вы можете использовать re.search
следующим образом:
import re
lst = ['Thursday, June ##', 'some string', 'another string', 'etc', 'Friday, June ##', 'more strings', 'etc']
for i, msg in enumerate(lst):
match = re.search(",", msg)
if match != None:
lst[i] = msg[:match.span()[0]]
print(lst)
Выход:
['Thursday', 'some string', 'another string', 'etc', 'Friday', 'more strings', 'etc']
СПАСИБО! Это прекрасно, очень ценно. Что здесь делает [0] в методе разделения?