2

for循环中的Python列表,我如何将所有内容都放在一个列表中

import os
dir="/tmp/logvol/logs/fil/sap/archive/"
n=os.listdir(dir)
#print n

for x in n:
 #print x
 l = [];
 l.append(os.path.join(dir,x))
 print l

输出:

['/tmp/logvol/logs/fil/sap/archive/m.log']
['/tmp/logvol/logs/fil/sap/archive/k.log']
['/tmp/logvol/logs/fil/sap/archive/j.log']
['/tmp/logvol/logs/fil/sap/archive/p.log']

我需要一个列表而不是多个列表。

['/tmp/logvol/logs/fil/sap/archive/m.log', '/tmp/logvol/logs/fil/sap/archive/k.log', '/tmp/logvol/logs/fil/sap/archive/j.log', '/tmp/logvol/logs/fil/sap/archive/p.log']
4

3 回答 3

9

另一种方法是使用列表理解。

l = [os.path.join(dir,x) for x in n]
于 2013-10-24T19:50:52.113 回答
5

您需要将列表的声明移到l循环之外:

l = []
for x in n:
 #print x
 l.append(os.path.join(dir,x))

此外,Python 中不需要分号。

于 2013-10-24T19:48:08.703 回答
0

您在循环l的每次迭代中重新创建列表for

for x in n:
    #print x
    l = []; # here You recreate list every iteration
    l.append(os.path.join(dir,x))
    print l

for在循环之前避免这个实例化列表

l = []; # here You recreate list every iteration
for x in n:
    l.append(os.path.join(dir,x))
print l

并为变量选择其他名称,而不是l因为 http://www.python.org/dev/peps/pep-0008/#names-to-avoid

于 2013-10-24T19:51:37.403 回答