2011-03-22 96 views
2

的结果,为什么我不能做这样的事情:Python的 - 遍历list.append

files = [file for file in ['default.txt'].append(sys.argv[1:]) if os.path.exists(file)] 
+1

我认为你已经'输入'的'os'?但请注意:这是一个列表理解...不是生成器表达式。 – Johnsyweb 2011-03-22 11:30:24

+1

是什么让你觉得'append()'返回一个值?你在哪里读过的?你从哪里看到过这样的例子? – 2011-03-22 14:37:21

回答

10

list.append不会在Python返回任何东西:

>>> l = [1, 2, 3] 
>>> k = l.append(5) 
>>> k 
>>> k is None 
True 

您可能希望这个代替:

>>> k = [1, 2, 3] + [5] 
>>> k 
[1, 2, 3, 5] 
>>> 

或者,在你的代码:

files = [file for file in ['default.txt'] + sys.argv[1:] if os.path.exists(file)] 
+1

这是一个我完全忘记的事实 – 2011-03-22 11:26:08

+1

@Martin:不用担心,我们都忘记了事情。这就是为什么在编写长期理解之前总是最好在交互式提示中编写短代码示例 – 2011-03-22 11:30:37

4

如果您不想复制列表,也可以使用itertools.chain

files = [file for file in itertools.chain(['default.txt'], sys.argv[1:]) 
        if os.path.exists(file)]