影刀的官方指令【获取列表指定项的位置】的本质是python中的index()方法,该方法只能返回匹配到的第一个值,例如:list1=[1,9,3,4,7,9,23],我想查询list1这个列表中数字9的索引: list1.index(9),那么返回是只会是1;但实际业务中,如:我想获取近期热销商品中,我这个店铺的分别排名第几,若有多个商品进入排行,index()便不符合需求了
使用列表推导式配合python的内置函数enumerate,对该列表的下标(位置)与元素内容同时迭代,当元素内容与我们需要的相同,那么就返回此次迭代的下标(位置)。
具体代码如下:
def find_all_indices(lst,value):# lst是我们要查找的列表,value是我们要查下标(位置)的值是多少
# return python中的关键字,与影刀<流程参数>中的添加输出参数一致
return [index for index,current_value in enumerate(lst) if current_value == value] 拆解一下这个 [index for index,current_value in enumerate(lst) if current_value == value],这是一个列表推导式(python中的语法,可以快速生成一个指定内容的列表)。enumrate是一个python的内置函数,用于创建一个新的可以迭代(循环)的对象,该对象包括参数的下标(位置)以及每个值。因此,我们需要两个变量来分别保存此次循环到的内容。其中变量index用于获取下标(位置),current_value用于获取此次循环到的值。如果不加后面的if current_value == value,那么输出return的结果就是所有的索引(因为我只返回index,没让返回current_value)
所以加上if判断,我们只返回此次获取到的值,与我们闯入的参数value相等的情况下的下标index。

