2013-04-05 5 views
1

Скажем, у меня есть список полных имен, как:Сохраните первое слово строки Python?

names : ["Katie von Martin", "Bob Austin Marley", "John Travolta", "Josh Hartnett"] 

Что бы функция, чтобы разделить каждую строку и сохранить только первое слово выглядит?

def keepFirstName(): 
    for name in names: 
     ???? 
+0

Что делать, если первое имя длиннее? – michaelmeyer

ответ

11

Самый простой будет:

def first_names(names): 
    for name in names: 
     yield name.split()[0] 

например,

>>> print list(first_names(["Katie von Martin", "Bob Austin Marley", "John Travolta", "Josh Hartnett"])) 
['Katie', 'Bob', 'John', 'Josh'] 

Есть несколько обстоятельств, когда вы можете не захотеть разделить строку, если вы просто хотите получить первое слово ... например. если строки ДЕЙСТВИТЕЛЬНО длинный. В этом случае, вы можете использовать str.find, чтобы получить местоположение первого места в строке, а затем вы можете нарезать до этого момента, чтобы дать вам только первое имя:

>>> def first_names(names): 
...  for name in names: 
...   idx = name.find(' ') 
...   yield name[:idx] if idx > 0 else name 
... 
>>> print list(first_names(["Katie von Martin", "Bob Austin Marley", "John Travolta", "Josh Hartnett"])) 
['Katie', 'Bob', 'John', 'Josh'] 

Однако на практике это почти никогда не нужно.

+2

+1 для генераторов. – DaveTheScientist

+2

Я бы изменил имя на что-то более интуитивное, если вы собираетесь сделать его генератором, например. 'firstNames', поэтому утверждения типа' для имени в firstNames ([...]) 'более читабельны. –

+1

@HenryKeiter - достаточно справедливо. Если я собираюсь изменить имя в любом случае, может также пойти с 'first_names', чтобы сделать PEP 8 счастливым :) – mgilson

8

С другой стороны, это даст вам первые слова:

>>> names = ["Katie von Martin", "Bob Austin Marley", "John Travolta", "Josh Hartnett"] 
>>> first_words = [words.split()[0] for words in names] 
>>> print first_words 

['Katie', 'Bob', 'John', 'Josh'] 
1

сохранить его и хранить его в списке,

b=[] 
for i in names: 
    b.append(i.split()[0]) 

Список б содержит первые имена

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