2017-02-10 4 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

FYI, исправление, которое вам нужно для вашего кода: '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

Смежные вопросы