2012-03-23 93 views
0

我有一個代碼,從一個.txt文件中取出一行,然後將其轉換爲一個清單,刪除空白。Python中的列表中的單個元素的單獨列表

是這樣的:

fd = open(filename,'rU') 
chars = [] 
for line in fd: 
    chars.append(line.strip()) 

return chars 

輸出看起來是這樣的:

['TTTTT', 'TTHHT', 'HHTHT', 'HHHHH', 'THTHT', ''] 

我想在這裏做的是轉出放到這個樣子:

[['T', 'T', 'T', 'T', 'T'], ['T', 'T', 'H', 'H', 'T',] etc...] 

我想將它們分成單個元素,但也要將它們保留在其原始列表中。

+0

你有什麼計劃與子表呢?你知道你可以遍歷字符串,並以同樣的方式將它們編入索引,是嗎?你不能就地修改它們。 – 2012-03-23 04:46:29

回答

4

我不知道你爲什麼要這樣做,因爲幾乎你可以用liststr做任何事情 - 除了改變它。

假設你有一個很好的理由,你可能希望你的循環改變

for line in fd: 
    chars.append(list(line.strip())) 

或在循環後,

chars = map(list, chars) 

會做到這一點。它將在chars的每個項目上運行list

在Python 2中,它將使list超出結果。

在Python 3中,你需要做的

chars = list(map(list, chars)) 

chars = [list(sublist) for sublist in chars] 
如果你想回來的名單鄰名單

+1

將這一切合併爲一行:'用f()打開(filename,'fU')作爲f:return [list(line.strip())。或者,如果您想依靠引用計數來關閉文件,請在打開的文件名'fU')]中輸入'lambda filename:[list(l.strip())。 – Dougal 2012-03-23 03:36:43

1
a = ['TTTTT', 'TTHHT', 'HHTHT', 'HHHHH', 'THTHT', ''] 
>>> 
>>> b = [list(x) for x in a] 
>>> b 
[['T', 'T', 'T', 'T', 'T'], ['T', 'T', 'H', 'H', 'T'], ['H', 'H', 'T', 'H', 'T'], ['H', 'H', 'H', 'H', 'H'], ['T', 'H', 'T', 'H', 'T'], []] 
>>> 
0

下面的Python列表解析會解決你的問題:如果你想要一個襯墊

lVals = [list(x.strip()) for x in open(filename,'rU').readlines()] 
0
>>> data = ['TTTTT', 'TTHHT', 'HHTHT', 'HHHHH', 'THTHT', ''] 
>>> map(list, data) 
[['T', 'T', 'T', 'T', 'T'], ['T', 'T', 'H', 'H', 'T'], ['H', 'H', 'T', 'H', 'T'], ['H', 'H', 'H', 'H', 'H'], ['T', 'H', 'T', 'H', 'T'], []] 
0

map(list, list(open('test.py')))

[list(a) for a in list(open('fileName.txt', 'rU'))]

但是這兩條線是最好的做法,像這樣

fileHandler = open('file.txt') 
fileData = map(list, list(fileHandler)) 
相關問題