Разделить строку и получить первые два раздела (если они существуют) в python

У меня есть эти строки в Python:

a=['One','one_two','one_two_three','one_two_three_four']

И мне нужно получить две первые части (разделение на основе «_»).

Я могу написать что-то вроде этого:

for c in a:
    
    x=c.split("_", 2)
    if (len(x)>=2):
        y=x[0]+'_'+x[1]
    else:
        y=x[0]
    print(y)

Но есть ли лучший способ сделать это?

Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит...
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
Учебник по веб-скрапингу
Учебник по веб-скрапингу
Привет, ребята... В этот раз мы поговорим о веб-скрейпинге. Целью этого обсуждения будет узнать и понять, что такое веб-скрейпинг, а также узнать, как...
Тонкая настройка GPT-3 с помощью Anaconda
Тонкая настройка GPT-3 с помощью Anaconda
Зарегистрируйте аккаунт Open ai, а затем получите ключ API ниже.
0
0
58
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы можете улучшить if, просто собрав первые 2 ([:2]) из split(), а затем join() их снова вместе:

a=['One','one_two','one_two_three','one_two_three_four']

for c in a:
    
    x=c.split("_")[:2]
    y='_'.join(x)
    print(y)

# One-liner variant
# [ print('_'.join(c.split("_")[:2])) for c in a ]
One
one_two
one_two
one_two

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

Вам не нужен второй аргумент для split()

Pingu 19.02.2023 19:32

Вот способ, который использует find() и не полагается на split(), что будет более эффективным, поскольку части снова соединяются таким образом, что обратный эффект split():

for c in a:
    i = c.find('_')
    if i != -1:
        i = c.find('_', i + 1)
    y = c if i == -1 else c[:i]
    print(y)

Выход:

One
one_two
one_two
one_two

Вот однострочник, использующий понимание списка:

['_'.join(c.split('_')[:2]) for c in a]

Он разбивает строку относительно «_», берет не более 2 сегментов и соединяет их обратно, помещая «_» между ними. Имейте в виду, что это возвращает обработанный список, поэтому вам все равно нужно его распечатать.

Вы также можете сделать это, используя аргумент sep для print() следующим образом:

a = ['One', 'one_two', 'one_two_three', 'one_two_three_four']

for c in a:
    print(*c.split('_')[:2], sep='_')

Выход:

One
one_two
one_two
one_two

Умное решение, не знаю, почему за него проголосовали...

constantstranger 19.02.2023 19:53

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