如果我有一個字符串列表,如:如何從句子列表中創建單詞列表?
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