当我输入此代码时:
phrase = 'I love my life'
phrase = phrase.split()
phrase.remove('I')
phrase
我得到了预期的结果:
['love', 'my', 'life']
但是,当我尝试使其更简洁时:
phrase = 'I love my life'
phrase.split().remove('I')
phrase
我得到了这个意想不到的结果:
'I love my life'
奇怪了,phrase =phrase.split()和这个对象phrase.split()有什么区别?当我们输入 type(phrase.split()) 时,它也是一个列表。
那么它们之间有什么区别呢?我不明白这个错误,有人可以向我解释一下吗?
最佳答案
str.split()
Return a list of the words in the string, using sep as the delimiter string. If maxsplit is given, at most maxsplit splits are done (thus, the list will have at most maxsplit+1 elements). If maxsplit is not specified or -1, then there is no limit on the number of splits (all possible splits are made)...
字符串在Python中是不可变的。以上摘自 python docs.org。 在下面的代码中,第一种情况:
phrase = 'I love my life'
phrase = phrase.split()
phrase.remove('I')
第 1 行:短语绑定(bind)到字符串对象的 var 名称,其值为“I love my life”。
第 2 行:短语绑定(bind)到列表对象的 var 名称!他不再指向前一个字符串,因为我们已将其指定为指向新的 py 对象。
第 3 行:list.remove()
适用于同一列表,如果列表中存在要删除的对象,则更新它。
代码片段2
phrase = 'I love my life'
phrase.split().remove('I')
第 1 行:短语绑定(bind)到字符串对象的 var 名称,其值为“I love my life”。
第 2 行:由于字符串是不可变的,因此解释器会为您完成工作并完成工作,但该表达式的结果未分配给任何 var 名称!如果你想获得相同的行为,你需要将结果分配给短语 var name 或用 Python 来说,重新绑定(bind)短语 var name。
请参阅下面的链接以进一步阅读
关于python - obj.split() 和 obj 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62631166/