更新列表元素

问题描述 投票:1回答:3

为什么元素不在for循环中更新?这让我

met_dir = r'D:\09052012\run\fout'
out_dir = r'D:\inpassingstest\test_cmd'

for c_dir in [met_dir,out_dir]:
    if c_dir[-1:] != '\\':
       c_dir += '\\'
       print c_dir
print met_dir

>>>D:\09052012\run\fout\
>>>D:\inpassingstest\test_cmd\
>>>D:\09052012\run\fout

当我使用索引来寻址元素时,也会发生同样的情况。

python list updating
3个回答
4
投票

字符串是不可变的对象,也就是说,您不能更改它,而是创建新的字符串。这意味着当您追加到字符串时,原始字符串保持不变。一个简单的解决方案是列表理解,以创建新字符串的新列表:

>>> [c_dir + "\\" if not c_dir.endswith("\\") else c_dir for c_dir in (met_dir, out_dir)]
['D:\\09052012\\run\\fout\\', 'D:\\inpassingstest\\test_cmd\\']

哪个人可以很容易地将其分解为值:

met_dir, out_dir = [...]

请注意我对str.endswith()的使用,这是进行检查的好方法。


2
投票

字符串在Python中是不可变的。 c_dir += '\\'创建一个附加了\\的新字符串,但不替换原始字符串。


2
投票

strings在Python中是不可变的,您不能那样更改它们的内容。这行中发生的事情是:

c_dir += '\\'

局部变量c_dir被新的字符串替换(附加\\)。当您离开循环迭代时,此新字符串将丢失。

© www.soinside.com 2019 - 2024. All rights reserved.