我很难理解这段代码是如何工作的。
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 :(得分: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'
正如您所看到的,此功能旨在提取Mr
,Ms
等标题。如果,
或.
等特定字符不是,则此实现很容易出错在输入字符串中找到,例如:
>>> '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