2014-05-02 44 views
4
foo = open('words.txt').readlines() 
[k.rstrip() for k in foo if k.rstrip() != ''] 

我想重用修改密鑰,像重用修改列表理解關鍵

[k.rstrip() for k in foo if k != ''] 

這可能嗎?


# input (words.txt) 
# this will be just some lines with one or more words separated by space. 
# there will be no *special* case or anything 
foo bar 
baz 
bar baz waz 

# expected output 
>>> ['foo bar', 'baz', 'bar baz waz'] 
+0

你能請提供一個例子「foo」是什麼。 – sshashank124

+0

你不能這樣做。列表理解的目標表達式不能訪問除迭代項目以外的任何內容。你必須根據'foo'創建一個新的迭代器,或者寫出一個顯式循環,而不是使用列表理解。 – BrenBarn

+0

如果您可以發佈一些更好的樣本數據和預期的輸出,那麼我們可能會提出更好的解決方案,如果可能的話。 –

回答

2

做這樣的:

[x for x in (k.replace('\n', '').strip() for k in foo) if x] 

看起來要過濾掉空行,你可以做這樣的事情爲:

#Assuming `c` is the file object 
>>> [line.rstrip() for line in c if not line.isspace()] 
['foo bar', 'baz', 'bar baz waz'] 
#Demo 
>>> foo = ['foo bar\n', 'baz\n', 'bar baz waz\n', ' \n'] 
>>> [line.strip() for line in foo if not line.isspace()] 
['foo bar', 'baz', 'bar baz waz']