我必须在目录中创建更多文件,因此我希望以编程方式完成。我选择了python但是如何解决以下问题
我有一个清单
L=['a','b','c']
现在我想修改列表 L 中的条目,如下所示
L=['a.txt','b.txt','c.txt']
怎么做?
我必须在目录中创建更多文件,因此我希望以编程方式完成。我选择了python但是如何解决以下问题
我有一个清单
L=['a','b','c']
现在我想修改列表 L 中的条目,如下所示
L=['a.txt','b.txt','c.txt']
怎么做?
>>> L=['a','b','c']
>>> L[:] = [x + '.txt' for x in L]
>>> L
['a.txt', 'b.txt', 'c.txt']
切片分配[:]
用于改变L
自身并保留引用。例如。如果您不使用它会发生这种情况
>>> L=['a','b','c']
>>> L2 = L # you may have a reference like this in your code somewhere
>>> L = [x + '.txt' for x in L] # this simply reassigns the name L to a new value
>>> L
['a.txt', 'b.txt', 'c.txt']
>>> L2 # but doesn't affect the name L2 which is still binded to the old list
['a', 'b', 'c']
要修改列表,请使用索引对其进行迭代:
for i in range(len(L))):
L[i] += '.txt'
但是,在这种情况下,您实际上并不需要修改列表,因此您可能想要使用列表理解,正如@Ashwini Chaudhary 所建议的那样。但是,使用列表推导会创建新列表,因此您可以再次将其分配给 L:
L = [s + '.txt' for s in L]
但是,如果原始变量 L 是全局变量或非局部变量,则上述语句将创建新的局部变量,该变量将在当前函数结束时消失,如果您在赋值之前尝试访问它,可能会造成混乱:
>>> L = ['a', 'b', 'c']
>>> def addtxt():
... print(L)
... L = [s + '.txt' for s in L]
...
>>> addtxt()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in addtxt
UnboundLocalError: local variable 'L' referenced before assignment
您将需要添加global
(或nonlocal
在其他情况下)声明。这不是一个干净的方法来处理这个。
因此,将就地替换与列表理解相结合,您可以从@Jamylak 获得建议
L[:] = [s + '.txt' for s in L]
where[:]
表示列表的内容将被赋值的右侧替换。这不会添加本地绑定,并且适合上述循环适合的任何地方。
比上一个答案简单一点:
L = [i + '.txt' for i in L]
或者
for i, string in enumerate(L):
L[i] = string + '.txt'