my_list1 = [30,34,56]
my_list2 = [29,500,43]
如何检查列表中的所有值是否>?= 30? my_list1
应该有效,my_list2
不应该。
我唯一能想到的是:
boolean = 0
def func(ls):
for k in ls:
if k >= 30:
boolean = boolean + 1
else:
boolean = 0
if boolean > 0:
print 'Continue'
elif boolean = 0:
pass
事后看来,在处理速度真正重要的更大数据集之后,利用numpy
......我会这样做:
>>> my_list1 = [30,34,56]
>>> my_list2 = [29,500,43]
>>> import numpy as np
>>> A_1 = np.array(my_list1)
>>> A_2 = np.array(my_list2)
>>> A_1 >= 30
array([ True, True, True], dtype=bool)
>>> A_2 >= 30
array([False, True, True], dtype=bool)
>>> ((A_1 >= 30).sum() == A_1.size).astype(np.int)
1
>>> ((A_2 >= 30).sum() == A_2.size).astype(np.int)
0
您还可以执行以下操作:
len([*filter(lambda x: x >= 30, my_list1)]) > 0
答案 0 :(得分:94)
将all()
function与生成器表达式一起使用:
>>> my_list1 = [30, 34, 56]
>>> my_list2 = [29, 500, 43]
>>> all(i >= 30 for i in my_list1)
True
>>> all(i >= 30 for i in my_list2)
False
请注意,此测试大于或等于 30,否则my_list1
也不会通过测试。
如果你想在一个函数中这样做,你可以使用:
def all_30_or_up(ls):
for i in ls:
if i < 30:
return False
return True
e.g。只要您找到一个证明 值低于30的值,就会返回False
,如果您没有找到相反的证据,则返回True
。
同样,您可以使用any()
function来测试至少1个值是否符合条件。
答案 1 :(得分:7)
...您无法使用min()
的任何理由?
def above(my_list, minimum):
if min(my_list) >= minimum:
print "All values are equal or above", minimum
else:
print "Not all values are equal or above", minimum
我不知道这是不是你想要的,但从技术上讲,这就是你要求的......
答案 2 :(得分:3)
内置函数all
:
all (x > limit for x in my_list)
限制所有数字必须大于的值。
答案 3 :(得分:2)
您可以使用all()
:
my_list1 = [30,34,56]
my_list2 = [29,500,43]
if all(i >= 30 for i in my_list1):
print 'yes'
if all(i >= 30 for i in my_list2):
print 'no'
请注意,这包括所有等于30或更高的数字,而不是严格超过30。
答案 4 :(得分:0)
您可以执行以下操作:
def Lists():
my_list1 = [30,34,56]
my_list2 = [29,500,43]
for element in my_list1:
print(element >= 30)
for element in my_list2:
print(element >= 30)
Lists()
这将返回大于30的值为True,以及小于false的值。
答案 5 :(得分:0)
使用np.sum,np.min和all之间的总体胜利者在大型数组的速度方面似乎是np.min:
N = 1000000
def func_sum(x):
my_list = np.random.randn(N)
return np.sum(my_list < x )==0
def func_min(x):
my_list = np.random.randn(N)
return np.min(my_list) >= x
def func_all(x):
my_list = np.random.randn(N)
return all(i >= x for i in my_list)
(我需要将np.array定义放在函数内部,否则np.min函数会记住该值,并且在使用timeit测试速度时不会再次执行计算)
&#34;所有&#34;的表现很大程度上取决于何时找到不满足条件的第一个元素,np.sum需要做一些操作,在一般情况下,np.min在计算方面是最轻的。
当几乎立即满足标准并且全部循环快速退出时,all函数在np.min上稍微获胜:
>>> %timeit func_sum(10)
10 loops, best of 3: 36.1 ms per loop
>>> %timeit func_min(10)
10 loops, best of 3: 35.1 ms per loop
>>> %timeit func_all(10)
10 loops, best of 3: 35 ms per loop
但是当&#34;所有&#34;需要经历所有要点,这肯定要糟糕得多,并且np.min获胜:
>>> %timeit func_sum(-10)
10 loops, best of 3: 36.2 ms per loop
>>> %timeit func_min(-10)
10 loops, best of 3: 35.2 ms per loop
>>> %timeit func_all(-10)
10 loops, best of 3: 230 ms per loop
但是使用
np.sum(my_list<x)
非常有用,如果想知道x下面有多少个值。
答案 6 :(得分:0)
我写这个函数
def larger(x, than=0):
if not x or min(x) > than:
return True
return False
然后
print larger([5, 6, 7], than=5) # False
print larger([6, 7, 8], than=5) # True
print larger([], than=5) # True
print larger([6, 7, 8, None], than=5) # False
min()上的空列表将引发ValueError。所以我在条件中添加了if not x
。
答案 7 :(得分:-1)
a = [[a, 2], [b, 3], [c, 4], [d, 5], [a, 1], [b, 6], [e, 7], [h, 8]]
我需要上面的这个
a = [[a, 3], [b, 9], [c, 4], [d, 5], [e, 7], [h, 8]]
a.append([0, 0])
for i in range(len(a)):
for j in range(i + 1, len(a) - 1):
if a[i][0] == a[j][0]:
a[i][1] += a[j][1]
del a[j]
a.pop()