python中的子串比较

时间:2010-08-19 17:44:40

标签: python

如果我有List PhoneDirectory 例如:

['John:009878788677' , 'Jefrey:67654654645' , 'Maria:8787677766']

可用于比较列表中每个条目中子串的存在(例如:Joh)的函数。

我尝试过使用

if(PhoneDirectory.find(Joh) != -1)

但它不起作用

请帮助..

5 个答案:

答案 0 :(得分:16)

如果您想分别检查每个条目:

for entry in PhoneDirectory:
    if 'John' in entry: ...

如果您只是想知道任何条目是否满足条件而不关心哪一条:

if any('John' in entry for entry in PhoneDirectory):
    ...

请注意,any不会“浪费”工作 - 只要找到满足条件的一个条目,它就会返回True(如果没有条目符合条件)条件,它必须检查每一个,以确认,当然,然后返回False)。

答案 1 :(得分:3)

if any(entry.startswith('John:') in entry for entry in PhoneDirectory)

但是我会用两个元素准备一些东西,因为你的字符串列表不适合任务:

PhoneList = ['John:009878788677' , 'Jefrey:67654654645' , 'Maria:8787677766']

numbers = { a:b 
            for item in PhoneList
            for a,_,b in (item.partition(':'),)
            }

print numbers
print "%s's number is %s." % ( 'John', numbers['John'] )

答案 2 :(得分:1)

由于还没有人推荐这个,我会这样做:

all_johns = [p for p in PhoneDirectory if 'Joh' in p]

答案 3 :(得分:0)

您可以对“:”进行拆分,并在结果数组的第一个元素中查找您要查找的内容。

dir = ['John:009878788677' , 'Jefrey:67654654645' , 'Maria:8787677766'];
for a in dir:
    values = a.split(":")
    if values[0] == "John":
        print("John's number is %s" % (values[1]))

答案 4 :(得分:0)

如果此任务的性能计算使用某些SuffixTree实现。或者只是让任何DBMS引擎完成索引工作。