我的列表如下:listvalues = [True, True, False, True, False, 24, somestring, 50]
所以列表的前五个元素是布尔值,其余的是字符串和整数。
现在我想检查前五个元素是真还是假,如果它们是真的,
我想使用某种方法,具体取决于元素的索引。
因此,在上面的情况中,应该对第一个元素(索引0)执行一个操作,然后对第二个元素(索引1)执行另一个操作,然后对第四个元素执行另一个操作。
如果所有布尔值均为假,则应出现警告。
对于noob问题很抱歉,但我自己找不到一个简单易行的解决方案......
答案 0 :(得分:3)
这里有很多可能有用的东西。首先,您应该使用列表切片来隔离布尔值。如果您知道前5个元素是您所追求的,那么myList[0:5]
将获得那些元素并忽略其他元素。
接下来,查看any
函数。如果任何元素为True,它将返回True
,因此您可以这样做以决定是否需要发出警告:
if not any(myList[0:5]):
# Code here to issue the warning.
接下来,要处理要调用的函数,您可能需要这样的东西:
funcList = [f0, f1, f2, f3, f4]
for idx, test in enumerate(myList[0:5]):
if test: funcList[idx]()
理想情况下,如果您想要跳过该功能,那么更好的方法是将原始列表中的各个函数引用而不是布尔值,其值为None。您的原始列表最终会如下所示:
myList = [f1, f2, None, f3, None, 24, "string", 50]
要拨打您要拨打的电话,请执行以下操作:
for func in myList[0:5]:
if func is not None: func()
答案 1 :(得分:1)
all_false = True
for x in yourlist:
if x is True:
# call some method
# ...
all_false = False
if all_false:
# print warning
答案 2 :(得分:1)
鉴于您已经定义了要为每种情况应用的函数,您可以将它们放在列表中以在循环中调用它们
perform = [func1, func2, func3, func4, func5]
if not any(listvalues[:5]): raise Exception
for index in range(5):
if listvalues[index]:
func = perform[index]
func()
答案 3 :(得分:0)
if not any(filter(lambda x: type(x)==bool, listvalues)):
print "warning"
else:
filter(lambda x: type(x[1])==bool and x[1]==True, enumerate(listvalues))
抱歉,忘记了前5个元素部分,只需将其切片..并且无需检查bool ......
答案 4 :(得分:0)
if your_list[:5] == [False,False,False,False,False]:
print 'warning'
else:
method1(your_list[0])
method2(your_list[1])
method3(your_list[2])
method4(your_list[3])
method5(your_list[4])
def method1(myBool):
if myBool == False:
return
--- method content ---
def method2(myBool):
if myBool == False:
return
--- method content ---
...
将是我的解决方案。