假设我有一个这样的文件(假装它是一个矩阵):
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来检查列。那是最干净的吗?
答案 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
是不必要的(更糟糕的是,它因为大文件消耗大量内存而有害),你可以只对文件进行迭代。