列表理解中的格式打印问题

时间:2014-03-26 01:04:12

标签: python

大家好我试图使用列表理解和一些过滤来清理列表。由于某种原因(这暗示我)过滤不会按预期工作,我已经仔细检查了我的语法并三重检查它几乎是正面的正确。

我期待类似的输出:

DOMAINNAME\USERNAME

我得到的是什么

C:\python27\filename
DOMAINNAME\USERNAME

上面告诉我,.format类型格式在我的下面的代码中不起作用。

def tllocal(domain):
    try:
        out = subprocess.check_output(["tasklist", "/V", "/FO", "List", "/FI", "USERNAME eq {0}\*" .format(domain)])
        users = [item for item in out.split() if "{0}" and "\\" in item .format(domain)]
        sortedl = set(users)
        print sortedl
        for name in sortedl:   
           print name
    except CalledProcessError as e:
        print(e.returncode)
    return sortedl

我相信正是这条线造成了这个问题。

users = [item for item in out.split() if "{0}" and "\\" in item .format(domain)]

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

你是对的,这是不正确的。这个表达

if "{0}" and "\\" in item .format(domain)

被解析为:

(if '{0}') and ("\\" in item .format(domain))

始终为True,因为字符串文字'{0}'始终为真。

编写上述内容的正确方法是all

[item for item in out.split() if all(x in item for x in (domain, '\\'))]

或简称为and,因为您只有两个元素:

[item for item in out.split() if domain in item and '\\' in item]