2017-07-22 14 views
0

このコードがどのように機能するかについては理解しづらいです。Pythonでsplitを使って文章から単語を抽出する

def get_title(name): 
    if '.' in name: 
     return name.split(',')[1].split('.')[0].strip() 
    else: 
     return 'Unknown' 

ans=get_title('Braund, Mr. Owen Harris') 
print (ans) 

スプリットは文字の分割に使用されていますが、これは私にはあまり意味がありません。

+0

あなたの所望の出力を投稿してください。 – Ajax1234

答えて

0

ここで起こることは、Method chainingと呼ばれます。これは、メソッドがオブジェクトを返す場合、呼び出したメソッドで直接返されたオブジェクトにメソッドを追加できることを意味します。

はのは、コードの戻りラインを分解してみましょう:

  • name.split(',')は、それぞれが「」文字列でリスト項目間の区切りとして扱われている項目のリストを返します。 'Braund, Mr. Owen Harris')に、これは、以下のリストを返す:['Braund', ' Mr. Owen Harris']
  • 以下[1]は、文字列オブジェクトであり、リストの2番目の項目、('Mr. Owen Harris'
  • ['Mr', 'Owen Harris']を返し、リストに再びその文字列を分割split('.')次に、選択します。
  • 次に、最初の項目が[0]によって選択され、文字列'Mr'が返されます。
  • 最後に、strip()は、文字列の先頭と末尾にあるすべての空白を削除します。
1

次の例のように、分割を一つずつを行うと、その行く方法を確認する必要があります

name = 'Braund, Mr. Owen Harris' 
name = name.split(',')[1] # this split will give ['Braund', ' Mr. Owen Harris'] 
          # then it takes element 1 which is ' Mr. Owen Harris' 
name = name.split('.')[0] # here the split is [' Mr', ' Owen Harris'] 
          # then it takes elemet 0 which is ' Mr' 
name = name.strip()  # strip removes white spaces from the string (the leading space for this case) 
3

それはあなたは、Python REPLとして少しプレイするとどうなるかを理解するのは簡単です。最も興味深い部分は、あなたが示されたコードの3行目に起こる:

return name.split(',')[1].split('.')[0].strip() 

のは、何が起こるかを理解するためにREPLでステップバイステップでそれを実行してみましょう:

>>> 'Braund, Mr. Owen Harris'.split(',') 
['Braund', ' Mr. Owen Harris'] 
>>> 'Braund, Mr. Owen Harris'.split(',')[1] 
' Mr. Owen Harris' 
>>> 'Braund, Mr. Owen Harris'.split(',')[1].split('.') 
[' Mr', ' Owen Harris'] 
>>> 'Braund, Mr. Owen Harris'.split(',')[1].split('.')[0] 
' Mr' 
>>> 'Braund, Mr. Owen Harris'.split(',')[1].split('.')[0].strip() 
'Mr' 

あなたはこの機能がある見ることができるように

>>> 'Braund Mr. Owen Harris'.split(',')[1].split('.')[0].strip() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IndexError: list index out of range 
,または .などの特定の文字が入力文字列内に見つからない場合は、この実装は、たとえば、エラーが発生しやすくなり MrMsなどのようなタイトルを抽出するためのもの「」

'Braund, Mr. Owen Harris' 

最初splitはすべてを見つけるだろうし、それらの位置の文字列を分割:

0

あなたが始まります。だから、あなたが得る:

['Braund', ' Mr. Owen Harris'] 

あなたがと残っているので、次に2番目の要素を取る:

' Mr. Owen Harris' 

あなたはその後、「で、この文字列を分割します。あなたが最初の要素取るその後

[' Mr', ' Owen Harris'] 

:: 'と取得

' Mr' 

をして、それを取り除く:

name = 'Braund, Mr. Owen Harris' 

if '.' in name: 
:私はあなたの例に基づいて説明します
'Mr' 
0

名前にはが含まれます?あなたは、

[' Mr', ' Owen Harris'] 

を次に:返す、

['Braund', ' Mr. Owen Harris'] 

を今、あなたは第二の要素(name.split(',')[1])を取得し、あなたは.を使用して、それを分割:はい、あなたは返す、,を使用して名前を分割しました

' Mr' 

strip()を除去するために使用される:返す最初の要素(name.split(',')[1].split('.')[0])を取得余分な先頭と末尾のスペース。

そして、最終的な結果:

'Mr' 
0

は、このヘルプをしていますか?

def get_title(name): 
     print type(name), name 
     if '.' in name: 
      print type(name.split(',')), name.split(',') 
      print type(name.split(',')[1]) , name.split(',')[1] 
      print type(name.split(',')[1].split('.') ), name.split(',')[1].split('.')   
      print type(name.split(',')[1].split('.')[0]) , name.split(',')[1].split('.')[0]     
      print type(name.split(',')[1].split('.')[0].strip()), name.split(',')[1].split('.')[0].strip()  
      return name.split(',')[1].split('.')[0].strip() 
     else: 
      return 'Unknown' 

    ans=get_title('Braund, Mr. Owen Harris') 
    print (ans) 

戻り値:

<type 'str'> Braund, Mr. Owen Harris 
<type 'list'> ['Braund', ' Mr. Owen Harris'] 
<type 'str'> Mr. Owen Harris 
<type 'list'> [' Mr', ' Owen Harris'] 
<type 'str'> Mr 
<type 'str'> Mr 
Mr 
関連する問題