对python中list的五种查找方法说明


Posted in Python onJuly 13, 2020

Python中是有查找功能的,五种方式:in、not in、count、index,find 前两种方法是保留字,后两种方式是列表的方法。

下面以a_list = ['a','b','c','hello'],为例作介绍:

对python中list的五种查找方法说明

string类型的话可用find方法去查找字符串位置:

a_list.find('a')

如果找到则返回第一个匹配的位置,如果没找到则返回-1,而如果通过index方法去查找的话,没找到的话会报错。

对python中list的五种查找方法说明

补充知识:Python中查找包含它的列表元素的索引,index报错!!!

对于列表["foo", "bar", "baz"]和列表中的项目"bar",如何在Python中获取其索引(1)?

一、index

>>> ["foo", "bar", "baz"].index("bar")

警告如下

请注意,虽然这也许是回答这个问题最彻底的方法是问,index是一个相当薄弱的组件listAPI,而我不记得我最后一次使用它的愤怒。在评论中已经向我指出,因为这个答案被大量引用,所以应该更加完整。关于list.index跟随的一些警告。最初可能需要查看文档字符串:

>>> print(list.index.__doc__)
L.index(value, [start, [stop]]) -> integer -- return first index of value.
Raises ValueError if the value is not present.

我曾经使用过的大多数地方index,我现在使用列表推导或生成器表达式,因为它们更具有推广性。因此,如果您正在考虑使用index,请查看这些出色的python功能。

如果元素不在列表中,则抛出

如果项目不存在则调用index结果ValueError。

>>> [1, 1].index(2)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ValueError: 2 is not in list

如果该项目可能不在列表中,您应该

首先检查它item in my_list(干净,可读的方法),或

将index呼叫包裹在try/except捕获的块中ValueError(可能更快,至少当搜索列表很长时,该项通常存在。)

二、enumerate()

大多数答案解释了如何查找单个索引,但如果项目在列表中多次,则它们的方法不会返回多个索引。用途enumerate():

for i, j in enumerate(['foo', 'bar', 'baz']):
  if j == 'bar':
    print(i)

该index()函数仅返回第一个匹配项,同时enumerate()返回所有匹配项。

作为列表理解:

[i for i, j in enumerate(['foo', 'bar', 'baz']) if j == 'bar']

这里还有另一个小解决方案itertools.count()(与枚举几乎相同):

from itertools import izip as zip, count # izip for maximum efficiency

[i for i, j in zip(count(), ['foo', 'bar', 'baz']) if j == 'bar']

对于较大的列表,这比使用更有效enumerate():

$ python -m timeit -s "from itertools import izip as zip, count" "[i for i, j in zip(count(), ['foo', 'bar', 'baz']*500) if j == 'bar']"
10000 loops, best of 3: 174 usec per loop
$ python -m timeit "[i for i, j in enumerate(['foo', 'bar', 'baz']*500) if j == 'bar']"
10000 loops, best of 3: 196 usec per loop

三、NumPy

如果您想要所有索引,那么您可以使用NumPy:

import numpy as np
 
array = [1, 2, 1, 3, 4, 5, 1]
item = 1
np_array = np.array(array)
item_index = np.where(np_array==item)
print item_index
# Out: (array([0, 2, 6], dtype=int64),)

它是清晰易读的解决方案。

四、zip

具有该zip功能的所有索引:

get_indexes = lambda x, xs: [i for (y, i) in zip(xs, range(len(xs))) if x == y]
 
print get_indexes(2, [1, 2, 3, 4, 5, 6, 3, 2, 3, 2])
print get_indexes('f', 'xsfhhttytffsafweef')

以上这篇对python中list的五种查找方法说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python设置windows桌面壁纸的实现代码
Jan 28 Python
python通过socket查询whois的方法
Jul 18 Python
Python中使用bidict模块双向字典结构的奇技淫巧
Jul 12 Python
Python深入06——python的内存管理详解
Dec 07 Python
Python实现删除文件中含“指定内容”的行示例
Jun 09 Python
python基础_文件操作实现全文或单行替换的方法
Sep 04 Python
对Python正则匹配IP、Url、Mail的方法详解
Dec 25 Python
Python进阶之全面解读高级特性之切片
Feb 19 Python
在Pycharm中使用GitHub的方法步骤
Jun 13 Python
Django 开发环境与生产环境的区分详解
Jul 26 Python
Python使用random模块实现掷骰子游戏的示例代码
Apr 29 Python
Django集成富文本编辑器summernote的实现步骤
May 31 Python
使用Python项目生成所有依赖包的清单方式
Jul 13 #Python
Python判断远程服务器上Excel文件是否被人打开的方法
Jul 13 #Python
Python依赖包迁移到断网环境操作
Jul 13 #Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 #Python
python--shutil移动文件到另一个路径的操作
Jul 13 #Python
python virtualenv虚拟环境配置与使用教程详解
Jul 13 #Python
python 安装移动复制第三方库操作
Jul 13 #Python
You might like
php使用PDO方法详解
2014/12/27 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
window.addEventListener来解决让一个js事件执行多个函数
2012/12/26 Javascript
jquery事件重复绑定的快速解决方法
2014/01/03 Javascript
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
七个很有意思的PHP函数
2014/05/12 Javascript
js使用html()或text()方法获取设置p标签的显示的值
2014/08/01 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
Javascript基础_标记文字的实现方法
2016/06/14 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
Vue.js系列之项目结构说明(2)
2017/01/03 Javascript
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
2019/07/08 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
Python3基础之条件与循环控制实例解析
2014/08/13 Python
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
django静态文件加载的方法
2018/05/20 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
用python生成1000个txt文件的方法
2018/10/25 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注
2013/01/31 HTML / CSS
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
应届生新闻编辑求职信
2013/11/19 职场文书
网站设计师的岗位职责
2013/11/21 职场文书
大学生在校学习的自我评价
2014/02/18 职场文书
高中军训感言500字
2014/02/24 职场文书
工作保证书范文
2014/04/29 职场文书
2014年办公室文秘工作总结
2014/12/09 职场文书
教你用Python爬取英雄联盟皮肤原画
2021/06/13 Python
Django实现drf搜索过滤和排序过滤
2021/06/21 Python
java设计模式--原型模式详解
2021/07/21 Java/Android