В списке строк из нескольких слов извлеките второе слово - PullRequest
1 голос
/ 11 декабря 2019

У меня есть список строк. Я хотел бы извлечь второе слово в каждой строке и сохранить его в новый список. Некоторые из элементов имеют только одно слово.

l = ["OPTY PLN EXTRCT","MRKT COMMUNITY TABLE", "COMM", "EXT OPTY EMP"] 

Требуемый вывод:

output = ['PLN', 'COMMUNITY', 'OPTY']

Работа со списком позволяет получить первое слово.

[i.split()[0] for i in l] 

Приведенный ниже код вызывает ошибку индекса, поскольку в списке есть элементы, содержащие только одно слово.

[i.split()[1] for i in l]

Если элемент содержит только одно слово, я бы хотел, чтобы итерация пропустила его и продолжила. Я играю с Try и, за исключением, но не смог заставить его работать.

Ответы [ 2 ]

4 голосов
/ 11 декабря 2019

Вы можете просто добавить условие if к вашему пониманию, например ... if len(i.split()) > 1], однако для этого потребуется разделить слова дважды, здесь мы делаем это один раз для каждого элемента l, используя map().

l = ["OPTY PLN EXTRCT","MRKT COMMUNITY TABLE", "COMM", "EXT OPTY EMP"]

output = [words[1] for words in map(str.split, l) if len(words) > 1]

Выходы:

['PLN', 'COMMUNITY', 'OPTY']

В качестве альтернативы, если вы используете python3.8, мы можем использовать новую нотацию :=.

output = [words[1] for i in l if len(words := i.split()) > 1]
0 голосов
/ 11 декабря 2019
words = [w.split(None, 3)[1] for w in l if any(x.isspace() for x in w.strip())]

Это исключит слово из списка, если оно является пустой строкой, состоит только из пробелов и если оно содержит символы, но между ними нет пробелов. Поэтому у вас должно быть как минимум два слова, которые нужно разделить и извлечь. Обратите внимание, что мое решение для разделения останавливает разделение после второго слова, поэтому их может быть много в строке, но split () не потеряет время, обрабатывая их все.

...