我想检查列表是否仅包含特定元素(在我的情况下为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
希望我很清楚,在此先感谢。
答案 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
循环相比,有一个内置函数可以更好地满足您的需求,并且运行速度更快(且代码更少)。