1

次のようなフルネームのリストがあるとしましょう。

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

各文字列を分割し、最初の単語のみを保持する関数はどのようになりますか?

def keepFirstName():
    for name in names:
        ????
4

3 に答える 3

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']

ただし、実際には、これが必要になることはほとんどありません。

于 2013-04-05T17:43:33.363 に答える
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']
于 2013-04-05T17:44:38.697 に答える
1

それを保持してリストに保存するには、

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

リスト b には名前が含まれています

于 2013-04-05T17:48:42.743 に答える