繁体   English   中英

需要帮助来了解rstrip()方法

[英]Need help understanding rstrip() method

我一直在把'\\n'从列表中拉出来,这使我很好奇到底发生了什么。

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

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

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

当我在外壳中执行此操作时,它会打印出剥离的值,但不会更新numList。 但是由于某些原因,下面的代码确实更改了我的列表的值:

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

像下面这样的东西似乎根本没有任何作用:

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

因此,基本上,什么时候可以for x in someList:语法中使用for x in someList: ?何时需要类似第二个示例的东西?

问题不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现在指向新列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM