Python:在列表中查找

发布于 2021-02-02 23:15:19

关于你的第一个问题:该代码非常好,并且如果与item其中的一个元素相等就可以正常工作myList。也许你尝试查找与其中一项不完全匹配的字符串,或者你使用的浮点值会导致不准确。

关于第二个问题:如果“查找”列表中的内容,实际上有几种可能的方法。

检查里面是否有东西
这是你描述的用例:检查列表中是否包含某些内容。如你所知,你可以使用in运算符:

3 in [1, 2, 3] # => True

过滤集合

即,找到满足特定条件的序列中的所有元素。你可以为此使用列表推导或生成器表达式:

matches = [x for x in lst if fulfills_some_condition(x)]
matches = (x for x in lst if x > 6)

后者将返回一个生成器,你可以将其想象为一种懒惰列表,该列表仅在你对其进行迭代时才会构建。顺便说一句,第一个完全等于

matches = filter(fulfills_some_condition, lst)

在Python 2中。在这里你可以看到工作中的高阶函数。在Python 3中,filter不返回列表,而是返回类似生成器的对象。

寻找第一次出现

如果你只想匹配条件的第一件事(但是你还不知道它是什么),那么可以使用for循环(可能也使用该else子句,这并不是很知名)。你也可以使用

next(x for x in lst if ...)

StopIteration如果没有找到任何匹配项,则将返回第一个匹配项或引发a 。或者,你可以使用

next((x for x in lst if ...), [default value])

查找物品的位置

对于名单,也就是在index,如果你想知道,有时是有用的方法,其中某一个元素是列表:

[1,2,3].index(2) # => 1
[1,2,3].index(4) # => ValueError

但是,请注意,如果有重复项,则.index始终返回最低索引:......

[1,2,3,2].index(2) # => 1

如果有重复项,并且想要所有索引,则可以enumerate()改用:

[i for i,x in enumerate([1,2,3,2]) if x==2] # => [1, 3]
关注者
0
被浏览
62
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    关于你的第一个问题:该代码非常好,并且如果与item其中的一个元素相等就可以正常工作myList。也许你尝试查找与其中一项不完全匹配的字符串,或者你使用的浮点值会导致不准确。

    关于第二个问题:如果“查找”列表中的内容,实际上有几种可能的方法。

    检查里面是否有东西

    这是你描述的用例:检查列表中是否包含某些内容。如你所知,你可以使用in运算符:

    3 in [1, 2, 3] # => True
    

    过滤集合

    即,找到满足特定条件的序列中的所有元素。你可以为此使用列表推导或生成器表达式:

    matches = [x for x in lst if fulfills_some_condition(x)]
    matches = (x for x in lst if x > 6)
    

    后者将返回一个生成器,你可以将其想象为一种懒惰列表,该列表仅在你对其进行迭代时才会构建。顺便说一句,第一个完全等于

    matches = filter(fulfills_some_condition, lst)
    

    在Python 2中。在这里你可以看到工作中的高阶函数。在Python 3中,filter不返回列表,而是返回类似生成器的对象。

    寻找第一次出现
    如果你只想匹配条件的第一件事(但是你还不知道它是什么),那么可以使用for循环(可能也使用该else子句,这并不是很知名)。你也可以使用

    next(x for x in lst if ...)
    

    StopIteration如果没有找到任何匹配项,则将返回第一个匹配项或引发a 。或者,你可以使用

    next((x for x in lst if ...), [default value])
    

    查找物品的位置
    对于名单,也就是在index,如果你想知道,有时是有用的方法,其中某一个元素是列表:

    [1,2,3].index(2) # => 1
    [1,2,3].index(4) # => ValueError
    

    但是,请注意,如果有重复项,则.index始终返回最低索引:......

    [1,2,3,2].index(2) # => 1
    

    如果有重复项,并且想要所有索引,则可以enumerate()改用:

    [i for i,x in enumerate([1,2,3,2]) if x==2] # => [1, 3]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看