python中怎么用find索引出想要的数字_Python在列表中查找项目索引的最快方法

If one was to attempt to find the indexes of an item in a list you could do it a couple different ways here is what I know to be the fastest

aList = [123, 'xyz', 'zara','xyz', 'abc'];

indices = [i for i, x in enumerate(aList) if x == "xyz"]

print(indices)

Another way not pythonic and slower

count = 0

indices = []

aList = [123, 'xyz', 'zara','xyz', 'abc'];

for i in range(0,len(aList):

if 'xyz' == aList[i]:

indices.append(i)

print(indices)

the first method is undoubtedly faster however what if you wanted to go faster is there a way? for the first index using method

aList = [123, 'xyz', 'zara','xyz', 'abc'];

print "Index for xyz : ", aList.index( 'xyz' )

is very fast but cant handle multiple indexes How might one go about speeding things up?

解决方案def find(target, myList):

for i in range(len(myList)):

if myList[i] == target:

yield i

def find_with_list(myList, target):

inds = []

for i in range(len(myList)):

if myList[i] == target:

inds += i,

return inds

In [8]: x = range(50)*200

In [9]: %timeit [i for i,j in enumerate(x) if j == 3]

1000 loops, best of 3: 598 us per loop

In [10]: %timeit list(find(3,x))

1000 loops, best of 3: 607 us per loop

In [11]: %timeit find(3,x)

1000000 loops, best of 3: 375 ns per loop

In [55]: %timeit find_with_list(x,3)

1000 loops, best of 3: 618 us per loop

Assuming you want a list as your output:

All options seemed exhibit similar time performance for my test with the list comprehension being the fastest (barely).

And if you're cool with returning a generator, it's way faster than the other approaches. Thought it doesn't account for actually iterating over the indices, nor does it store them, so the inds cannot be iterated over a second time.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值