最も簡単な方法は、リスト内包表記を使用することです。
[word for word in lowers if len(word)>=5 and sorted(word)==list(word)]
もう1つは、Python2のフィルター関数をこのようなものに使用することです。また、これはstring.joinを使用して、ソートされたリストを文字列に変換し直します
#Lambda function to test condition
test = lambda x: len(x)>=5 and ''.join(sorted(x))==x
#Returns list of elements for which test is True
filter(test, lowers)
プレーンなol'関数(ボーナス:ジェネレーターとyield!):
def filterwords(lst):
for word in lst:
if len(word)>=5 and sorted(word)==list(word):
yield word
最後のものは、最も効率的で、リソースの面でなどです。
更新:.sort()を(文字列ではなく)リストで使用してリストを直接ソートできますが、値を返しません。したがって、list(word).sort()
ここでは役に立ちません。を使用しますsorted(word)
。
>>> lst = [1,100,10]
>>> sorted(lst) #returns sorted list
[1, 10, 100]
>>> lst #is still the same
[1, 100, 10]
>>> lst.sort() #returns nothing
>>> lst #has updated
[1, 10, 100]