如果我有一个字符串列表,如:如何从句子列表中创建单词列表?
lst = ['aa bb', 'cc dd', 'cc aa']
我怎样才能进入的唯一字列表这个像这样:
['aa', 'bb', 'cc', 'dd']
使用的理解?下面是据我已经得到了,无济于事:
wordList = [x.split() for row in lst for x in row]
如果我有一个字符串列表,如:如何从句子列表中创建单词列表?
lst = ['aa bb', 'cc dd', 'cc aa']
我怎样才能进入的唯一字列表这个像这样:
['aa', 'bb', 'cc', 'dd']
使用的理解?下面是据我已经得到了,无济于事:
wordList = [x.split() for row in lst for x in row]
我认为最简单的方法可能是这样,虽然不是最有效的。
set(' '.join(lst).split())
如果你真的想要一个列表,然后只是包装,在给list()
非常酷。简短而甜美。谢谢。 – StatsViaCsh
你要循环拆分值:
wordList = [word for row in lst for word in row.split()]
然后用一组,使独特的整个列表:
wordList = list({word for row in lst for word in row.split()})
或只使用一组,并用它做:
wordList = {word for row in lst for word in row.split()}
演示:
>>> lst = ['aa bb', 'cc dd', 'cc aa']
>>> list({word for row in lst for word in row.split()})
['aa', 'cc', 'dd', 'bb']
>>> {word for row in lst for word in row.split()}
set(['aa', 'cc', 'dd', 'bb'])
如果顺序事项(上面的代码返回词语任意顺序,排序顺序是巧合凭借的CPython的实现细节),使用一个单独的组来跟踪重复值:
seen = set()
wordList = [word for row in lst for word in row.split() if word not in seen and not seen.add(word)]
为了说明的差别,一个更好的输入样本:
>>> lst = ['the quick brown fox', 'brown speckled hen', 'the hen and the fox']
>>> seen = set()
>>> [word for row in lst for word in row.split() if word not in seen and not seen.add(word)]
['the', 'quick', 'brown', 'fox', 'speckled', 'hen', 'and']
>>> {word for row in lst for word in row.split()}
set(['and', 'brown', 'fox', 'speckled', 'quick', 'the', 'hen'])
我知道OP要求提供一个列表,但是如果你正在制作一个列表,那么可能没有理由将它列入列表中 - 这更可能是OP对于一组列表而言更好。 –
@Lattyware:在那里增加了一个'set()'是更简单的选项。 –
谢谢你的细节。 – StatsViaCsh
In [25]: list({y for x in lst for y in x.split()})
Out[25]: ['aa', 'cc', 'dd', 'bb']
要保持它的顺序,意味着从列表中删除重复项,您可以参考http://www.peterbe.com/plog/uniqifiers-benchmark。
维持秩序,你可以这样做:
>>> from collections import OrderedDict
>>> lst = ['aa bb', 'cc dd', 'cc aa']
>>> new = []
>>> for i in lst:
... new.extend(i.split())
...
>>> list(OrderedDict.fromkeys(new))
['aa', 'bb', 'cc', 'dd']
注意使用set()
是最有可能更快,因为马亭指出。
打电话也许只是移动的话成为一个集? Set包含唯一值。 –
订单是否重要? – TerryA