2016-02-18 80 views
3
words = [['hey', 'hey you'], ['ok', 'ok no', 'boy', 'hey ma']] 

刪除一個措辭字符串我有一個包含字符串列表的列表。我知道如何從列表中刪除特定的元素,但不知道如何刪除那些只有一個單詞的元素。我所需的輸出是:Python從列表

final = [['hey you'], ['ok no', 'hey ma']] 

我想要,但我認爲這是完全錯誤的....

remove = [' '] 
check_list = [] 

for i in words: 
    tmp = [] 
    for v in i: 
     a = v.split() 
     j = ' '.join([i for i in a if i not in remove]) 
     tmp.append(j) 

    check_list.append(tmp) 
print check_list 
+0

* 「我認爲這是完全錯誤的」 * - 它的工作原理?你*測試過了嗎? – jonrsharpe

+0

是,IVE測試,但'check_list'其輸出爲'words' – user47467

+1

好了,所以得到[MCVE]。 – jonrsharpe

回答

5

你可以這樣做:

words = [['hey', 'hey you'], ['ok', 'ok no', 'boy', 'hey ma']] 
final = [[x for x in sub if ' ' in x.strip()] for sub in words] 
# [['hey you'], ['ok no', 'hey ma']] 

,我只需搜索爲所有字符串中的空格。

+0

@PeterWood ...只是修正了通過剝離串第一 –

2

您可以使用filter

for words in list_of_lists: 
    words[:] = list(filter(lambda x: ' ' in x.strip(), words)) 

或列表理解:

for words in list_of_lists: 
    words[:] = [x for x in words if ' ' in x.strip()] 
+0

尼斯方法 –

1

函數式編程的方式來做到這一點:

>>> words 
[['hey', 'hey you'], ['ok', 'ok no', 'boy', 'hey ma']] 
>>> map(lambda v: ' '.join(v), 
    filter(lambda y: len(y) > 1, map(lambda x: x.split(), words[1]))) 
['ok no', 'hey ma'] 
>>> map(lambda z: map(lambda v: ' '.join(v), 
    filter(lambda y: len(y) > 1, map(lambda x: x.split(), z))), words) 
[['hey you'], ['ok no', 'hey ma']] 
-1

下面是每個列表中的邏輯,這你可以循環並使用

wordlist=['hey', 'hey you'] 
filter(None, [ p if re.sub('\\b\\w+\\b', '', p) != '' else None for p in wordlist ]) 

輸出

['hey you']