找出python中的完全匹配

时间:2013-12-07 08:13:49

标签: python-2.7 find

我正试图从列表中找出一个字符串。 这是代码:

    wordlist = ['gedit','leafpad','qstardict','stardict']

    letters = str('stardict')

    for item in wordlist:
        if item.find(letters) != -1:
            print item

首先显示'qstardict'然后'stardict'。 但我希望它首先显示'stardict'。 请帮帮我。

2 个答案:

答案 0 :(得分:1)

编辑:最后一次尝试做你要问的事,如果这不是你想要的,请更新问题,并提供你需要帮助的完整描述;

这将所有以子字符串开头的单词,按字母顺序排列;

result = sorted(x for x in wordlist if x.startswith(letters))

答案 1 :(得分:1)

这个?

wordlist = ['stardictionaries','hop','stardicto',
            'stardictionaria', 'jumper',
            'gedit','leafpad','qstardict',
            'stardictionary','stardict',]

def seurch1(deb,wordlist):
    for item in wordlist:
        if item.startswith(deb):
            yield item

def seurch2(deb,wordlist):
    L = len(deb)
    for item in wordlist:
        if item[0:L]==deb:
            yield item

from pprint import pprint

pprint( list(seurch1('stardict',wordlist)) )
print
pprint( sorted(seurch1('stardict',wordlist),key=len) )  

print '--------------------'

pprint( list(seurch2('stardict',wordlist)) )
print
pprint( sorted(seurch2('stardict',wordlist),key=len) )

我认为seurch2()更快

结果

['stardictionaries',
 'stardicto',
 'stardictionaria',
 'stardictionary',
 'stardict']

['stardict',
 'stardicto',
 'stardictionary',
 'stardictionaria',
 'stardictionaries']
--------------------
['stardictionaries',
 'stardicto',
 'stardictionaria',
 'stardictionary',
 'stardict']

['stardict',
 'stardicto',
 'stardictionary',
 'stardictionaria',
 'stardictionaries']

修改

seurch1()seurch2()是完全相同的两个功能。
它们是生成器函数,因为它们中存在关键字yield而不是return 它们充当迭代器:每次调用时它们都会产生一个元素,如:

for el in seurch2('stardict',wordlist):
    print el

但是list(seurch2('stardict',wordlist))一次调用所有产生的元素并将它们返回到列表中。

如果您想按字母顺序排序,只需执行以下操作:

sorted( seurch2('stardict',wordlist) )

因为元素然后根据它们的字符串值进行排序,并且

print 'bc' < 'ba'
# False
print 'bc' < 'bda'
# True
print 'bcxyzterry' < 'bda'
# True