2017-07-22 4 views

Antwort

0

Was hier passiert, heißt Method chaining. Wenn eine Methode ein Objekt zurückgibt, können Sie eine Methode für das zurückgegebene Objekt direkt an die aufrufende Methode anhängen.

Lasst uns, dass die Rückkehr Codezeile brechen:

  • name.split(',') gibt eine Liste von Elementen, wobei jedes ‚‘ in der Zeichenkette als Trennzeichen zwischen Listenelementen behandelt wird. Auf 'Braund, Mr. Owen Harris') dies die folgende Liste gibt: ['Braund', ' Mr. Owen Harris']
  • Die folgenden [1] wählt das zweite Element in der Liste, der ein String-Objekt ist ('Mr. Owen Harris')
  • nächste split('.') spaltet diese Zeichenfolge wieder in eine Liste, zurückkehr ['Mr', 'Owen Harris'].
  • Dann wird das erste Element von [0] ausgewählt und gibt die Zeichenfolge 'Mr' zurück.
  • Schließlich entfernt strip() alle Leerzeichen vom Anfang und vom Ende der Zeichenfolge.
1

Sie sollten die Teilungen eins nach dem anderen tun und sehen, wie sein Gehen, zum Beispiel:

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

Es ist leicht zu verstehen, was passiert, wenn man ein wenig mit Python REPL spielen. Der interessanteste Teil geschieht in Zeile 3 des Codes haben Sie gezeigt:

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

Lassen Sie uns es für Schritt in REPL Schritt ausführen, um zu verstehen, was passiert:

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

Wie Sie diese Funktion zu sehen ist gemeint Titel wie Mr zu extrahieren usw. Ms Diese Implementierung ist fehleranfällig, wenn bestimmte Zeichen wie , oder . werden in der Eingabezeichenfolge nicht gefunden, zum Beispiel:

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

Sie beginnen mit:

'Braund, Mr. Owen Harris' 

Die erste split alle finden ‚‘ und teilen Sie die Zeichenfolge an diesen Positionen. So erhalten Sie:

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

Dann nehmen Sie das zweite Element, so dass Sie mit gelassen:

' Mr. Owen Harris' 

Sie spalten dann diese Zeichenfolge durch‘.'Und erhalten:

[' Mr', ' Owen Harris'] 

Danach können Sie das erste Element nehmen:

' Mr' 

Und es abzustreifen:

'Mr' 
0

ich auf Ihrem Beispiel erklären basiert wird:

name = 'Braund, Mr. Owen Harris' 

if '.' in name: 

Der Name enthält .? Ja, dann spalten Sie Namen , verwenden, die zurückgibt:

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

Nun Sie das zweite Element (name.split(',')[1]) abrufen, und Sie teilen Sie es . verwenden, die zurückgibt:

[' Mr', ' Owen Harris'] 

Dann Sie abrufen des ersten Elements (name.split(',')[1].split('.')[0]), die zurückgibt: wird

' Mr' 

strip() verwendet zu entfernen zusätzliche führende und abschließende Leerzeichen.

Dann wird das Endergebnis:

'Mr' 
0

Does diese Hilfe?

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) 

Returns:

<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