循环通过非None而不是空目录

时间:2018-05-09 08:42:47

标签: python python-3.x list directory

给出两个目录,例如

dirA=getTrainingDir()
dirB=getTestingDir()

现在我想循环遍历两个目录,如果它们不是None而不是空字符串

我现在正在做的是:

data_directories=[]
if dirA:
  data_directories.append(dirA)
if dirB:
  data_directories.append(dirB)
for data_directory in data_directories:
  ...

为此目的,还有更优雅的语法吗?

3 个答案:

答案 0 :(得分:10)

没有更好的方法可以做到这一点,但你可以使用这样的东西:

if any([dirA,dirB])

或:

data_directories=[di for di in [dirA,dirB]  if di]

答案 1 :(得分:0)

一种方法可能意味着使用list comprehensions

for data_directory in [dir for dir in [dirA, dirB] if dir]: 

但如果您可以修改被调用的函数,更好的策略将返回该函数的列表。

翻译示例:

>>> def getTrainingDir():
...     return ['test']
...
>>> def getTestingDir():
...     return []
...
>>>
>>> for data_directory in getTrainingDir() + getTestingDir():
...     print(data_directory)
...
test

答案 2 :(得分:0)

您可以使用filter方法:

dirA = 'training_dir'
dirB = None

data_directories = list(filter(bool, [dirA, dirB])) # ['training_dir']