我一直试图找出如何在列表中查找特定单词然后将这些单词移到新列表中。说我有:
a = ['a','b','c','d','e']
我只想要一个,c和e。是否可以在不使用.remove()的情况下执行此操作?
答案 0 :(得分:4)
好吧,我希望我能理解你的问题。如果它们位于另一个列表中,您只想选择一个列表的内容。您可以使用list comprehensions。
以下是在交互式提示下播放的示例。
>>> a = ['a','b','c','d','e']
>>> [x for x in a if x in ['a', 'c', 'e' ]]
['a', 'c', 'e']
或更清晰的命名
>>> list = ['a','b','c','d','e', 'a', 'd', 'e', 'c']
>>> wanted = ['a', 'c', 'e' ]
>>> [x for x in list if x in wanted]
['a', 'c', 'e', 'a', 'e', 'c']
答案 1 :(得分:3)
使用filter()
内置功能:
>>> lst = ['a','b','c','d','e']
>>>
>>> def keep(item):
... # Implement whatever criterion you need here
... return item in ('a', 'c', 'e')
...
>>> filter(keep, lst)
['a', 'c', 'e']
filter
只会返回一个已过滤的序列(在您的情况下为一个列表)而不修改输入序列。
keep
只需要是一个函数,给定一个项目,通过返回True
(保持)或False
(丢弃)来决定是否保留它。
注意:正如@tobias_k所指出的,在Python 3 filter()
中将返回一个迭代器。因此,如果您确实需要一个列表(不仅仅是一个可迭代的),您需要将它传递给list()
构造函数,如下所示:
newlist = list(filter(keep, lst))