返回列表中的索引

时间:2014-01-23 14:52:46

标签: python list

def test(lst):        
        new_lst = []
        for i in lst:
                if i is True:
                        new_lst.append(lst.index(i))
        return new_lst

以上代码应该做什么:

循环遍历列表中的每个元素,如果元素为True,则将其附加到新列表中。但是,它没有做到它应该做的事情,我无法弄清楚我哪里出错了。

预期:

test([1,2,3,True,True,False])
[3,4]

GOT:

[0,0]

3 个答案:

答案 0 :(得分:7)

这不是你的代码返回的内容。您的代码返回[0, 0],因为list.index使用相等语义,而不是标识语义,True == 1(尝试它)。

对于解决方案,请使用enumerate

new_lst = [index for (index, element) in enumerate(lst) if element is True]

http://docs.python.org/2/library/functions.html#enumerate

的更多信息

答案 1 :(得分:2)

list.index返回找到第一个匹配的索引。另一个错误是因为list.index使用了等式语义 - 想象==符号 - 而True == 1返回True。有关详细信息,请参阅@max's answer

使用内置函数enumerate代替:

for i, v in enumerate(lst):
    if v is True:
        new_lst.append(i)

答案 2 :(得分:2)

您可以使用enumerate功能并执行以下操作:

for index, elem in enumerate(lst):
    if elem is True:
        new_lst.append(index)

您的代码返回[0,0]。这是有意义的,因为它们在列表中只有两个True值,但在传递list.index值时,以某种方式在python True方法中将返回第一个trueish值,该值在你的案例将是lis 1中的第一个元素,因此你得到[0,0]

list.index行为的示例:

>>>l=[1,2,3,True,True,False]
>>>l.index(True)
1    # first trueish value

正如@MaxNoel list.index测试相等所指出的那样,与True == 1类似,搜索True索引时返回索引0。

希望这有帮助!