列表推导选择索引

1 投票
3 回答
1038 浏览
提问于 2025-04-16 09:22

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

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

撰写回答