-4

我必须在目录中创建更多文件,因此我希望以编程方式完成。我选择了python但是如何解决以下问题

我有一个清单

L=['a','b','c']

现在我想修改列表 L 中的条目,如下所示

L=['a.txt','b.txt','c.txt']

怎么做?

4

3 回答 3

3
>>> 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'] 
于 2013-05-13T11:12:04.230 回答
2

修改列表,请使用索引对其进行迭代:

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[:]表示列表的内容将被赋值的右侧替换。这不会添加本地绑定,并且适合上述循环适合的任何地方。

于 2013-05-13T11:11:31.453 回答
2

比上一个答案简单一点:

L = [i + '.txt' for i in L]

或者

for i, string in enumerate(L):
    L[i] = string + '.txt'
于 2013-05-13T11:13:21.977 回答