问的是什么: 通过过滤下层列表,创建一个至少5个字母长的单词列表,其字母已按字母顺序排列。
我有什么:
[word for word in lowers if len(word)>= 5 and word.sort=word]
我知道这不起作用,因为word.sort正在字符串上使用,而word需要是一个列表才能使这个功能起作用。我如何在列表理解中执行此操作,或者我是否需要先定义一些内容。
答案 0 :(得分:2)
>>> sorted('foo') == list('foo')
True
>>> sorted('bar') == list('bar')
False
答案 1 :(得分:1)
最简单的方法是使用列表理解:
[word for word in lowers if len(word)>=5 and sorted(word)==list(word)]
另一个是使用Python 2的filter函数来做这样的事情。此外,这使用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)
Plain ol'功能(奖励:generators和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]