列表理解选择索引

时间:2011-01-03 23:17:59

标签: python matrix list-comprehension

假设我有一个这样的文件(假装它是一个矩阵):

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 个答案:

答案 0 :(得分:7)

如果我正确地理解了这个问题,这应该有效(但也许我已经过度简化了)。注意内在理解中的[: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

答案 1 :(得分:3)

将每一行切成第3列:matrix = [[a for a in b][:3] for b in lines]

答案 2 :(得分:2)

“但只有3列”?这应该是什么意思?根据您的示例,您的意思是“只有前四列”吗?如果是这样,那很简单:

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

调用readlines是不必要的(更糟糕的是,它因为大文件消耗大量内存而有害),你可以只对文件进行迭代。

相关问题