![](/img/trans.png)
[英]Sum elements in python list only if elements in a separate boolean list are True
[英]Python: How to access only some boolean elements of a list with a loop?
我有这样的列表: listvalues = [True, True, False, True, False, 24, somestring, 50]
因此列表的前五个元素是布尔值,其余的是字符串和整数。 现在,我想检查前五个元素是对还是错,如果它们是对,我想使用某种方法,具体取决于元素的索引。 因此,在上述情况下,应该对第一个元素(索引0)执行一个操作,然后对第二个元素(索引1)执行另一个操作,然后对第四元素执行另一个操作。 如果所有布尔值均为假,则应显示警告。 很抱歉这个菜鸟问题,但是我自己找不到一个简单易用的解决方案...
这里有很多事情可能会有所帮助。 首先,您应该使用列表切片来分隔布尔值。 如果您知道所要myList[0:5]
的前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()
all_false = True
for x in yourlist:
if x is True:
# call some method
# ...
all_false = False
if all_false:
# print warning
既然已经定义了要在每种情况下应用的功能,则可以将它们放在列表中以在循环中调用它们
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()
如果没有布尔值,是否会有警告?
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 ...
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 ---
...
将是我的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.