我有一长串子列表,看起来像这样: [[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的列表,等等...
答案 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]