对列表列表进行分组的 Pythonic 方法?

Pythonic way to group a list of lists?

所以假设我在 Python 中有一个假设的文件名列表,定义如下:

l = [["user1/stats1.csv", "user1/stats2.csv", "user1/stats3.csv"], 
    ["user2/stats1.csv", "user2/stats2.csv", "user2/stats3.csv"]]

按照 statsN.csv 中的数字对它进行分组的最 pythonic 方法是什么,这样列表看起来像:

l = [["user1/stats1.csv", "user2/stats1.csv"], 
    ["user1/stats2.csv", "user2/stats2.csv"],
    ["user1/stats3.csv", "user2/stats3.csv"],

作为参考,原始列表是通过使用 glob* 通配符 a la glob.glob("user1/stats*.csv")glob.glob("user2/stats*.csv")

获得的

您可以解压缩子列表和 zip:

out = list(map(list, zip(*l)))

输出:

[['user1/stats1.csv', 'user2/stats1.csv'],
 ['user1/stats2.csv', 'user2/stats2.csv'],
 ['user1/stats3.csv', 'user2/stats3.csv']]

如果你使用的是 numpy,你可以简单地转置:

>>> np.array(l).T.tolist()
[['user1/stats1.csv', 'user2/stats1.csv'],
 ['user1/stats2.csv', 'user2/stats2.csv'],
 ['user1/stats3.csv', 'user2/stats3.csv']]