返回列表中元素的索引

时间:2014-01-24 17:19:55

标签: python list

class ModeBool():

    def __init__(self, mode):
        self.mode = mode

class IndexOfBool():

    def __init__(self, lst):
        '''
        Creates a list of True's as it's elements based on the given number.

        >>> i1 = IndexOfBool(5)

        Should create -> [True, True, True, True, True]
        '''
        self.lst = [ModeBool(True) for i in range(lst)]

    def bool_true(self):
        new_lst = []
        for index, element in enumerate(self.lst):
            if element is True:
                new_lst.append(index)
        return new_lst

但是,当我致电bool_true时,它不会返回正确的结果:

i1 = IndexOfBool(10)
i1.bool_true()
[]

应该返回的内容:

i1 = IndexOfBool(10)
i1.bool_true()
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

不太确定为什么它不会返回预期的内容。另外,如果我要将ModeBool(True)替换为ModeBool(False),则应该创建一个False列表。如果我在bool_true列表中调用False而不是return []

2 个答案:

答案 0 :(得分:3)

这一行

self.lst = [ModeBool(True) for i in range(lst)]

应该是

self.lst = [ModeBool(True).mode for i in range(lst)]

答案 1 :(得分:0)

element is True false ,因为每个元素都是使用ModeBool(True)创建的。

将其添加到ModeBool,不要与is进行比较:

    def __bool__(self):
        return self.mode

对于python2,请使用__nonzero__