【问题标题】:Is there a better way to iterate through list of lists?有没有更好的方法来遍历列表列表?
【发布时间】:2019-08-05 07:19:55
【问题描述】:

我有一长串如下所示的子列表: [[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 的列表,等等......

【问题讨论】:

  • “我想做的是将所有 A 列表连接在一起,将所有 B 列表连接在一起,等等......” 目前还不清楚你真正想要做什么。如果您可以提供您正在寻找的特定输出以及输入,那么有人可能知道如何到达那里。
  • 您可以使用itertools.chain.from_iterableHere的详细解释。

标签: python list


【解决方案1】:

使用 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')]

【讨论】:

    【解决方案2】:

    您可能想要展平列表:

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

    【讨论】:

      猜你喜欢
      • 2019-09-30
      • 2015-05-27
      • 2014-06-14
      • 2021-11-12
      • 2017-02-03
      • 1970-01-01
      • 2015-01-08
      • 2021-02-23
      • 1970-01-01
      相关资源
      最近更新 更多