2017-02-10 42 views
1

我需要一些简单的帮助。我有内容的文件是这样的:如何从文件创建二维字符列表?

jdss 
sdjk 
nbjs 

所以有行,每行的字符数目不详的数目不详,但所有线路的长度相同。我想得到一个二维列表

[['j','d','s','s'], 
['s','d','j','k'], 
['n','b','j','s']] 

如何以最简单的方式做到这一点?我试过的:

list = [[]] 
for line in f: 
    whichLine = 0 
    for ch in line: 
     list [whichLine].append(ch) 
    list.append([]) 
    whichLine += 1 

但它不起作用就像我想要的。

+1

仅供参考,你需要的代码是'list [-1] .append(ch)'而不是'list [whichLine] .append(ch)'然后它按照你的预期工作,除了它离开最后一个额外的空列表。 – TemporalWolf

回答

4
>>> [list(line) for line in f] 
[['j', 'd', 's', 's'], ['s', 'd', 'j', 'k'], ['n', 'b', 'j', 's']] 
+0

好的,我认为这是最简单的方法。谢谢! –

4

列表理解在这里很有效。

my_list = [[c for c in line] for line in f] 

(注意它通常不是一个好主意,覆盖名list

,如果你不想换行字符

my_list = [[c for c in line.strip()] for line in f] 
+0

是的,它的工作原理。谢谢! –

+1

正如@Stefan所提到的,'list(line)'或'list(line.strip())'足以将一个字符串转换为一个列表:) – TemporalWolf

+1

@TemporalWolf好点 – cmd

1
data = [] 
filename = '/path/to/file' 
with open(filename,'r') as f: 
    lines = f.readlines() 
    for line in lines: 
     data.append(list(line)) 
1

为了演示如何关闭你的代码是正确的,这是一个使用你的方法的固定解决方案:

my_list = [] 
for line in f: 
    my_list.append([]) 
    for ch in line: 
     my_list[-1].append(ch) 
+0

感谢此演示和技巧与列表[-1] –

+0

@PiotrWasilewicz'[-1]'给你列表中的最后一个元素。它非常方便。 – TemporalWolf