将字符串放入列表解析中的列表中

时间:2012-10-01 02:02:58

标签: python

问的是什么: 通过过滤下层列表,创建一个至少5个字母长的单词列表,其字母已按字母顺序排列。

我有什么:

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

我知道这不起作用,因为word.sort正在字符串上使用,而word需要是一个列表才能使这个功能起作用。我如何在列表理解中执行此操作,或者我是否需要先定义一些内容。

2 个答案:

答案 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'功能(奖励:generatorsyield!):

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]