【Python编程】如何在一个列表或者字符串中找出某个重复出现元素的所有位置?

本文介绍了一个Python函数,用于找出列表或字符串中特定元素的所有出现位置。通过遍历并利用.index()方法,该函数能有效返回所有指定元素的索引。

Python的编程中,我们希望找到某个元素在一个列表或者字符串的位置,通常使用.Index(x)方法,另外也可以对字符串使用.find(x)方法,但是无论是用.index(x) .find(x)方法,都只能返回第一个x出现的位置。如果x重复出现,如何能够快速查找处所有x的位置呢?

例如:有一个如下的列表L

>>> L=range(20)*3

>>> L

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

如果希望找到所有19出现的位置,我编写如下的程序:

 

def find_repeat(source,elmt): # The source may be a list or string.

        elmt_index=[]

        s_index = 0;e_index = len(source)

        while(s_index < e_index):

                try:

                    temp = source.index(elmt,s_index,e_index)

                    elmt_index.append(temp)

                    s_index = temp + 1

                except ValueError:

                    break

 

        return elmt_index

 

>>> find_repeat(L,19)

[19, 39, 59]

 

该程序也可用于字符串,例如:

>>> s= 'ababcdefgadema'

>>> find_repeat(s,'a')

[0, 2, 9, 13]

 

测试一下函数的运行时间:

import datetime

if __name__ == '__main__':

        L = range(int(1e6))*4

        t1 = datetime.datetime.now()

        index_list = find_repeat(L,19)

        t2 = datetime.datetime.now()

        print index_list

        print "It takes %s"%(t2-t1)

>>>

[19, 1000019, 2000019, 3000019]

It takes 0:00:00.062000

总共花费了62ms, 还不错!




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值