我正试图从列表中找出一个字符串。 这是代码:
wordlist = ['gedit','leafpad','qstardict','stardict']
letters = str('stardict')
for item in wordlist:
if item.find(letters) != -1:
print item
首先显示'qstardict'然后'stardict'。 但我希望它首先显示'stardict'。 请帮帮我。
答案 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