1

问题:通过过滤较低的列表,创建一个至少有 5 个字母长且其字母已按字母顺序排列的单词列表。

我有的:

[word for word in lowers if len(word)>= 5 and word.sort=word]

我知道这不会起作用,因为 word.sort 正在用于字符串,并且 word 需要是一个列表才能使此功能起作用。我将如何在列表理解中执行此操作,或者我之前是否需要定义一些东西。

4

2 回答 2

2
>>> sorted('foo') == list('foo')
True
>>> sorted('bar') == list('bar')
False
于 2012-10-01T02:06:55.953 回答
1

最简单的方法是使用列表推导:

[word for word in lowers if len(word)>=5 and sorted(word)==list(word)]

另一个是使用 Python 2 的过滤器功能来处理类似的事情。此外,这使用 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' 函数(奖励:生成器产量!):

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]
于 2012-10-01T02:23:33.013 回答