列表推导选择索引
假设我有一个这样的文件(想象它是一个矩阵):
abcde
fghik
lmnop
我想把它放到一个二维列表里,但只要到索引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 个回答
2
“但是只有最多三列”是什么意思呢?根据你的例子,是不是指“只有前四列”?如果是这样,那就简单了:
with f as open('file.txt'):
matrix = [list(line[:4]) for line in f]
调用 readlines
是不必要的(更糟糕的是,它会消耗大量内存,尤其是对于大文件),你可以直接遍历文件的每一行。
3
把每一行的内容切割到第三列:matrix = [[a for a in b][:3] for b in lines]
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