使用python

时间:2017-07-22 15:51:02

标签: python

我很难理解这段代码是如何工作的。

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)

据我所知,分裂用于分割字符,但这对我来说没有多大意义。

6 个答案:

答案 0 :(得分: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'

正如您所看到的,此功能旨在提取MrMs等标题。如果,.等特定字符不是,则此实现很容易出错在输入字符串中找到,例如:

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

答案 1 :(得分: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)

答案 2 :(得分:0)

这里发生的事情称为Method chaining。这意味着如果方法返回一个对象,则可以直接在调用方法上对返回的对象追加一个方法。

让我们分解代码的返回行:

  • name.split(',')返回一个项目列表,其中字符串中的每个“,”都被视为列表项之间的分隔符。在'Braund, Mr. Owen Harris')上,返回以下列表:['Braund', ' Mr. Owen Harris']
  • 以下[1]选择列表中的第二项,即字符串对象('Mr. Owen Harris'
  • 接下来,split('.')将该字符串再次拆分为一个列表,返回['Mr', 'Owen Harris']
  • 然后,[0]选择第一个项目,返回字符串'Mr'
  • 最后,strip()从字符串的开头和结尾删除所有空格。

答案 3 :(得分:0)

您从:

开始
'Braund, Mr. Owen Harris'

第一个split将找到所有','并在这些位置拆分字符串。所以你得到:

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

然后你拿第二个元素让你留下:

' Mr. Owen Harris'

然后将此字符串拆分为“。”得到:

[' Mr', ' Owen Harris']

之后你拿第一个元素:

' Mr'

剥去它:

'Mr'

答案 4 :(得分:0)

我会根据你的例子解释:

name = 'Braund, Mr. Owen Harris'

if '.' in name:

名称是否包含.?是的,然后使用,拆分名称,返回:

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

现在,您检索第二个元素(name.split(',')[1]),然后使用.将其拆分,返回:

[' Mr', ' Owen Harris']

然后,您检索第一个元素(name.split(',')[1].split('.')[0]),它返回:

' Mr'

strip()用于删除额外的前导和尾随空格。

然后是最终结果:

'Mr'

答案 5 :(得分: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