次のようなフルネームのリストがあるとしましょう。
names : ["Katie von Martin", "Bob Austin Marley", "John Travolta", "Josh Hartnett"]
各文字列を分割し、最初の単語のみを保持する関数はどのようになりますか?
def keepFirstName():
for name in names:
????
次のようなフルネームのリストがあるとしましょう。
names : ["Katie von Martin", "Bob Austin Marley", "John Travolta", "Josh Hartnett"]
各文字列を分割し、最初の単語のみを保持する関数はどのようになりますか?
def keepFirstName():
for name in names:
????
最も簡単なのは次のとおりです。
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']
ただし、実際には、これが必要になることはほとんどありません。
または、これにより最初の単語が得られます。
>>> 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']
それを保持してリストに保存するには、
b=[]
for i in names:
b.append(i.split()[0])
リスト b には名前が含まれています