Python:如何只使用循环访问列表的一些布尔元素?

时间:2011-12-19 22:12:02

标签: python list indexing boolean

我的列表如下:listvalues = [True, True, False, True, False, 24, somestring, 50] 所以列表的前五个元素是布尔值,其余的是字符串和整数。 现在我想检查前五个元素是真还是假,如果它们是真的, 我想使用某种方法,具体取决于元素的索引。 因此,在上面的情况中,应该对第一个元素(索引0)执行一个操作,然后对第二个元素(索引1)执行另一个操作,然后对第四个元素执行另一个操作。 如果所有布尔值均为假,则应出现警告。 对于noob问题很抱歉,但我自己找不到一个简单易行的解决方案......

5 个答案:

答案 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 ---
...

将是我的解决方案。