2012-06-06 4 views
2

Я создал список, содержащий другой абзац внутри каждого элемента.Найти первое слово абзаца внутри списка

Я хочу найти первое слово каждого абзаца.

Единственное, что я могу придумать, это разделить каждый абзац на отдельные слова и найти element[0]. Это кажется довольно чрезмерным, поскольку у меня уже есть каждый абзац уже в списке

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

+0

Вы правы, что полное разделение каждого абзаца просто для того, чтобы получить одно слово, кажется расточительным; есть ли что-то, что вы собираетесь делать с параграфами позже? – sarnold

ответ

3

Что-то вроде этого?

l = ['start of paragraph 1','start of paragraph 2','para 3'] 
first_words = [p.split()[0] for p in l] 
print first_words 

печатает: [ «начать», «начало», «пункт»]

Если вы не хотите, чтобы разделить каждый пункт, вы можете искать индекс первого места, и захват каждое слово до того:

l = ['start of paragraph 1','start of paragraph 2','para 3'] 
first_words = [p[:p.find(' ')] for p in l] 
print first_words 

печатает: [ 'начало', 'начало', 'пункт']

Разъяснение по запросу:

  • найти первое место в пункте с p.find («„) - возвращает позицию
  • затем занимают первые символы в абзаце через р [: p.find (“»)]
  • остальная часть этой линии называется list comprehension и в основном цикле по списку и принимает каждый абзац, p в свою очередь
+0

Я думаю, что это тот! Не могли бы вы объяснить, что делает эта часть инструкции [p [: p.find ('')] Большое спасибо. – captaindogface

+0

уверен - см. Комментарии – Gerrat

+0

Спасибо, Джеррант, один сыновней. Вместо того, чтобы найти первый пробел, если бы я хотел найти первый разрыв строки, я бы использовал find ('\ n') Еще раз спасибо – captaindogface

0

Если предположить, что каждый абзац начинается со слова (и не сказать, пробел или номер):

[par[:par.index(" ")] for par in list_of_par] 

Это то, что называется «понимание списка». Он проходит через каждый элемент в list_of_par и применяет к нему par[:par.index(" ")]. Это берет фрагмент абзаца (par), в этом случае от 0-го символа до (но не включая) первое пространство ([:par.index(" ")]).

Пояснение списка возвращает список строк; каждая строка содержит все символы в абзаце до первого пробела.

0

Как вы хотите, чтобы ваши слова были выложены? Вы не хотите, чтобы они просто не были пробелами или что они не содержат знаков препинания?

Первый рез:

first_words = [ 
     paragraph.split(None, 1)[0] 
     for paragraph in paragraphs 
] 
1

Хорошее горе:

my_paras = ["It was the best of times", "Twas a dark and stormy night", "The walrus and the carpenter"] 

my_first_words = [para.split(None, 1)[0] for para in my_paras] 

возвращает

['It', 'Twas', 'The'] 

Параметр None расколоть 'разделение на любом смежных пробельных' означает и, как правило, неявное, однако я должен указать его здесь, чтобы также указать второй параметр позиции, maxsplit. Пропустив maxsplit = 1,.split() останавливается после того, как находит первый символ пробела (возвращает список из двух элементов, состоящий из первого слова и остальной части абзаца) или после того, как он попадает в конец строки (возвращает список из одного элемента, весь пробег в пункте).

Смежные вопросы