目前通过“Python编程:CS简介”学习python,在将字符串拆分为列表之前,所有内容都已清晰可见。总的来说,我得到str.split()
的要点,但只是发现了一些有点古怪的东西。
这本书有以下例子:
>>> myString = "Hello, string methods!"
>>> myString.split()
['Hello,' , 'string' , 'methods!']
作者说,myString
现已被拆分为三个子串的列表。
继续,这样做会将myString
变成一个列表:
>>> myString = "Hello, string methods!"
>>> myString2 = myString.split()
>>> myString2
['Hello,' , 'string' , 'methods!']
到目前为止一切顺利。
在使用shell进行自己的实验后,我发现了以下内容:
# Testing splitting of variable x
>>> x = "Pleased to meet you"
>>> x
'Pleased to meet you'
>>> x.split()
['Pleased', 'to', 'meet', 'you']
>>> type(x)
**<class 'str'>**
# Testing behavior of splitting 'x' by assigning it to 'y'
>>> y = x.split()
>>> y
['Pleased', 'to', 'meet', 'you']
>>> type(y)
**<class 'list'>**
为什么x.split()
仍然x
成为str
,而y = x.split()
将其变为列表?
为什么python会以这种方式表现出来并且真正发生了什么?无论如何在变量上应用.split并得到一个列表,或者我总是得到一个str类型?
答案 0 :(得分:5)
这里的关键点是str.split()
返回列表,它不会影响字符串本身。因此y = x.split()
将y
设置为函数返回的列表,但x
本身不受影响。
答案 1 :(得分:5)
字符串是不可变的,str.split()
方法不会更改您拆分的字符串。而是返回新列表。当你没有分配表达式的结果而只是回应那个结果时,你会对shell中发生的事情感到困惑。
执行x.split()
时,返回新列表并在shell中回显。该列表未被其他任何内容引用,x
仍指向原始字符串,该字符串未发生变化。 type(x)
表示x
仍然指向原始字符串。
接下来,您实际将str.split()
生成的列表分配给新名称y
。然后,您回显y
并测试了y
的类型,str.split()
是y
生成的列表对象。这是合乎逻辑的,因为你告诉Python让x.split()
引用type(y)
的结果。 y
告诉您x
引用列表对象。
我强烈建议您阅读Ned Batchelder的优秀Facts and myths about Python names and values,它以非常明确的方式解释了名称(如y
和"Hello, string methods!"
)与Python对象的不同之处字符串['Pleased', 'to', 'meet', 'you']
或列表at Div_mod2.<init>(Div_mod2.java:67)
。
答案 2 :(得分:0)
split()
返回将字符串拆分为列表但不修改字符串本身的结果。您可以通过作业y = x.split()
捕获该列表以捕获其输出,但x
本身未经修改。