如何将列表列表的后半部分作为列表列表?

How to get the second half of a list of lists as a list of lists?

所以我知道要获得一个专栏,我必须写

a = list(zip(*f)[0])

并且生成的 a 将是一个列表,其中包含 f 中列表中的第一个元素。

如何让每个列表获得多个元素?我试过了

a = list(zip(*f)[1:19])

但它只是返回一个列表列表,其中内部列表由每个列表中的第 i 个元素组成。

简单的方法是不使用 zip()。相反,使用 list comprehension:

a = [sub[1:19] for sub in f]

如果真的是你要找的下半场:

a = [sub[len(sub) // 2:] for sub in f]

这将包括 [1, 2, 3, 4, 5] 中的 3。如果您不想包含它:

a = [sub[(len(sub) + 1) // 2:] for sub in f]

无论是性能还是可读性,您绝对应该更喜欢@zondo 的解决方案。但是,基于 zip 的解决方案是可能的,如下所示(在 Python 2 中):

zip(*zip(*f)[1:19])

尽管如此,您不应该在任何严肃的代码中考虑这种解包、压缩、切片、解包和重新压缩的循环 ;)

在 Python 3 中,您必须将两个 zip 结果都转换为 list,这就更不性感了。