У меня есть список в python
a=['one_foo','two_foo','bar_foo']
Ожидаемый результат:
['one','two','bar']
Я пробовал сделать первый конвертирующий список в строку, а затем с помощью regex
import re
re.sub("_.*$","", str(a))
Я знаю, что преобразование списка в строку является неправильным способом достижения этой задачи, может быть, есть какой-нибудь элегантный способ, не преобразовывая его в строку?
Вы можете использовать понимание списка с помощью str.rsplit
:
a = ['one_foo', 'two_foo', 'bar_foo']
res = [x.rsplit('_', 1)[0] for x in a]
['one', 'two', 'bar']
В общем случае решения регулярных выражений имеют тенденцию к ухудшению методов str
для аналогичных операций.
rsplit
отличается от 'split'
split
работает слева. rsplit
работает справа. Аргумент 1
означает, что мы выполняем только одно разбиение.