有没有更好的方法来遍历列表列表?

时间:2019-08-05 07:19:55

标签: python list

我有一长串子列表,看起来像这样: [[A,B,C,D],[A,B,C,D],[A,B,C,D]]。

我要做的是将所有A列表连接在一起,将所有B列表连接在一起,等等...

我已经找到了一种方法,但是它不是很优雅,而且当列表很长时也不是很优雅。所以我想知道是否有解决此问题的实用方法。

我尝试通过列表建立索引。这样做很好,但是正如我上面提到的,我的解决方案(如下所示)不适用于长列表。 我曾尝试使用mod(%)运算符建立索引,但是由于我的列表中有索引2和4,因此会在4时为bot生成0,因此此操作将无效。

self.Input_full = [[listA],[listB],[listC],[listD],[listA],etc...]
for sublist in self.Input_full:
            for list in sublist:
                if sublist.index(list) == 0 or sublist.index(list) == 4 or sublist.index(list) == 8:
                    self.X_sent.append(list)
                elif sublist.index(list) == 1 or sublist.index(list) == 5 or sublist.index(list) == 9:
                    self.Y_sent.append(list)
                elif sublist.index(list) == 2 or sublist.index(list) == 6 or sublist.index(list) == 10:
                    self.Ang_sent.append(list)
                else:
                    self.T_sent.append(list)

所需的输出是获得一个包含所有列表A的列表,一个包含所有列表B的列表,等等...

2 个答案:

答案 0 :(得分:3)

zip一起使用开箱:

long_list = [["A","B","C","D"],["A","B","C","D"],["A","B","C","D"]]
grouped_list = list(zip(*long_list))
print(grouped_list)

输出:

[('A', 'A', 'A'), ('B', 'B', 'B'), ('C', 'C', 'C'), ('D', 'D', 'D')]

如果您的long_list的长度不均匀,例如一个列表包含“ E”,而其他列表没有,请使用itertools.zip_longest

from itertools import zip_longest

long_list = [["A","B","C","D"],["A","B","C","D"],["A","B","C","D","E"]]
grouped_list = list(zip_longest(*long_list))
print(grouped_list)

输出:

[('A', 'A', 'A'),
 ('B', 'B', 'B'),
 ('C', 'C', 'C'),
 ('D', 'D', 'D'),
 (None, None, 'E')]

答案 1 :(得分:2)

您可能希望将列表弄平:

flat_list = [item for sublist in self.Input_full for item in sublist]