为了账号安全,请及时绑定邮箱和手机立即绑定

如何查找列表中元素的所有出现情况?

如何查找列表中元素的所有出现情况?

达令说 2019-06-09 14:18:40
如何查找列表中元素的所有出现情况?index()只会给出列表中某一项的第一次出现。是否有一个简单的技巧可以返回列表中的所有索引?
查看完整描述

3 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

您可以使用列表理解:

indices = [i for i, x in enumerate(my_list) if x == "whatever"]


查看完整回答
反对 回复 2019-06-09
?
潇湘沐

TA贡献1816条经验 获得超6个赞

虽然不是直接针对列表的解决方案,numpy为这类事情而闪耀:

import numpy as np
values = np.array([1,2,3,1,2,4,5,6,3,2,1])searchval = 3ii = np.where(values == searchval)[0]

返回:

ii ==>array([2, 8])

对于具有大量元素和其他解决方案的列表(数组)来说,这可以大大加快速度。


查看完整回答
反对 回复 2019-06-09
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

解决方案list.index:

def indices(lst, element):
    result = []
    offset = -1
    while True:
        try:
            offset = lst.index(element, offset+1)
        except ValueError:
            return result
        result.append(offset)

它比列表理解要快得多enumerate,用于大名单。它也比numpy如果您已经拥有了数组,否则转换成本超过了速度增益(在包含100个、1000个和10000个元素的整数列表上进行了测试)。

注:请注意,基于Chris_Rands的注释:如果结果足够稀疏,此解决方案比列表理解速度更快,但是如果列表中有许多正在搜索的元素的实例(超过列表的15%,在包含1000个整数的测试中),则列表理解速度更快。


查看完整回答
反对 回复 2019-06-09
  • 3 回答
  • 0 关注
  • 703 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信