понимание списка выбранных индексов - PullRequest
1 голос
/ 04 января 2011

Допустим, у меня есть такой файл (представьте, что это матрица):

abcde
fghik
lmnop

Я хочу поместить его в список 2d, но только с столбцами до индекса 3:

 #  0   1   2   3
 [['a','b','c','d'],
  ['f','g','h','i'],
  ['l','m','n','o']]

Как это сделать, используя понимание списка?Я знаю, что мог бы зацикливаться, но я ищу более чистый способ.

f = open('file.txt')
lines = f.readlines()
matrix = [[a for a in b] for b in lines] # this gets all columns, up to 4

Я также мог бы использовать enumerate / if в понимании внутреннего списка для проверки столбца.Это самый чистый?

Ответы [ 3 ]

7 голосов
/ 04 января 2011

Если я правильно понимаю вопрос, это должно сработать (но, возможно, я слишком упрощаю).Обратите внимание на [: 4] во внутреннем понимании:

f = open('file.txt')
lines = f.readlines()
matrix = [[a for a in b[:4]] for b in lines] # this gets all columns, up to 4
3 голосов
/ 04 января 2011

Разрезать каждую строку до 3-го столбца: matrix = [[a for a in b][:3] for b in lines]

2 голосов
/ 04 января 2011

"а только с колонками до 3"?Что это должно означать?Исходя из вашего примера, вы имеете в виду «только первые четыре столбца»?Если это так, просто:

with f as open('file.txt'):
    matrix = [list(line[:4]) for line in f]

Вызов readlines не нужен (хуже, вреден, так как он занимает много памяти для больших файлов), вы можете перебирать строки только файл.

...