Самый простой будет:
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']
Однако на практике это почти никогда не нужно.
Что делать, если первое имя длиннее? – michaelmeyer