需要帮助理解rstrip()方法

时间:2015-07-14 04:36:15

标签: python string python-3.x

我一直在搞清楚'\n'关闭列表,这让我很好奇实际发生了什么。

例如,为什么以下代码不会更改我的列表值?

numList = ['13\n', '14\n', '15\n']

for x in numList:
    x = x.rstrip('\n')

当我在shell中执行它时会打印出剥离的值,但不会更新numList。但由于某种原因,下面的代码确实改变了我的列表的值:

numList = [x.rstrip() for x in numList]

下面的内容似乎没有任何影响:

for x in numList:
    x.rstrip('\n')

所以基本上,你何时可以使用for x in someList:语法,何时需要第二个例子?

1 个答案:

答案 0 :(得分:7)

问题不在于rstrip()。当您使用for循环遍历列表时,为 -

for x in numList:

这里名称x只是对列表中对象的引用,当你这样做时 -

x = x.rstrip('\n')

您只需将x更改为指向其他字符串对象/引用,就不会更改列表中的引用。如果要使用for循环更改此类元素,则应在列表上enumerate,然后更改该索引处的元素。示例 -

for i, x in enumerate(numList):
    numList[i] = x.rstrip('\n')

虽然在你的情况下,这不是必需的,因为列表理解(你正在做的)将是你做你想做的最好的方法。

此外,当你这样做时 -

for x in numList:
    x.rstrip('\n')

它不会更改x,因为字符串在python中是不可变的,x.rstrip('\n')实际上返回一个从右侧剥离'\n'的新字符串对象。

另外,在列表理解中 -

numList = [x.rstrip() for x in numList]

您正在使用字符串x.rstrip()创建一个新列表,然后您将numList指向该新列表,它没有更改旧列表,因此如果您执行类似的操作 -

oldRef = newList
numList = [x.rstrip() for x in numList]
print(oldRef)

你可以看到oldRef仍然是相同的,只是numList现在指向一个新列表。