Python str.split()和列表创建

时间:2018-03-08 21:14:33

标签: python python-3.x

目前通过“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类型?

3 个答案:

答案 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本身未经修改。