如何在Python中的条件语句中使用循环?

时间:2018-12-26 07:37:44

标签: python loops logic

我想检查列表是否仅包含特定元素(在我的情况下为None)

我相信有一种Python方式可以做到,我尝试过: if mydict[direction] == None for direction in DIRECTIONS: ...

但这显然行不通

换句话说,我需要一种PYTHONIC方式,可以缩短下一个代码:

def ispure(element)
    for direction in DIRECTIONS:
        if mydict[direction] != element
            return False
        else:
            pass
    return True

希望我很清楚,在此先感谢。

2 个答案:

答案 0 :(得分:1)

最简单(但效率不高)的方法是: len(list(filter(lambda direction: mydict[direction] is not None, DIRECTIONS))) == 0

如果您想提高效率,并且在列表中间某处条件为假时不遍历所有元素,则可以使用takewhile

from itertools import takewhile len(list(takewhile(lambda direction: mydict[direction] is not None, DIRECTIONS))) == len(DIRECTIONS)

答案 1 :(得分:0)

有多种解决方案,因此您可以挑选毒药。假设if (strlen($row['insert_time']) > 0) { echo $row['insert_time']; } else { echo "No Results"; }; 是100个a的列表,以下是我可以想到的(按计算机性能排序):


使用None

set

时间:

def only_element(element, ls):
    return set(ls) == set([element])

使用$ python -m timeit 'set(a) == set([None])' 100000 loops, best of 5: 3.06 µs per loop

all

时间:

def only_element(element, ls):
    return all([item == element for item in ls])

使用$ python -m timeit 'all([item == None for item in a])' 50000 loops, best of 5: 8.81 usec per loop 循环:

for

时间:

def only_element(element, ls):
    for item in ls:
        if item != element:
            return False
    return True

使用$ python -m timeit 'for item in a:\n if item != None:\n break' 100000 loops, best of 5: 9.16 µs per loop

filter

时间:

def only_element(element, ls):
    return len(list(filter(lambda x: x != element, ls))) == 0

有什么收获?

通常,与使用$ python -m timeit 'len(list(filter(lambda x: x != None, a))) == 0' 10000 loops, best of 5: 20.8 usec per loop 循环相比,有一个内置函数可以更好地满足您的需求,并且运行速度更快(且代码更少)。