更新列表的元素

时间:2012-10-25 12:24:57

标签: python list updating

为什么for-loop中的元素没有更新?这让我

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

当我使用索引来处理元素时也会发生相同的情况。

3 个答案:

答案 0 :(得分: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()这是一种很好的检查方式。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

Python中的

str是不可变的,你不能改变它们的内容。在这一行中会发生什么:

c_dir += '\\'

局部变量c_dir将替换为新字符串(附加\)。离开循环迭代时,这个新字符串会丢失。