首页 > 解决方案 > 如何向后遍历这个压缩表?

问题描述

我有这样的表:

table = 
[[set(), {A}, set(), {B}], 
[{c}, set(), set(), {D}]]

我想遍历列,以便按顺序查看 B、D、set()、set()、A、set()、set()、C

我使用 zip(*table) 翻转了我的桌子,现在这个:

table = zip(*table)
for word_index, row in enumerate(table):
  for index in range(len(row)):
    print(row[index])

允许我像 set(), C, A, set(), set(), set(), B, D 这样迭代,非常接近。但我也想逆转。

zip(*table) 不允许我调用 reversed(zip(*table))

如何迭代我想要的方式?如果可以避免的话,我真的不想导入 Pandas 或 numpy。

标签: pythonloops

解决方案


reversed您可以在将它们传递给 zip 之前映射到这些行:

table = [[set(), {"A"}, set(), {"B"}], [{"c"}, set(), set(), {"D"}]]

成对:

for s1,s2 in zip(*map(reversed,table)):
    print(s1,s2)  

{'B'} {'D'}
set() set()
{'A'} set()
set() {'c'}

扁平化:

flat = (s for ss in zip(*map(reversed,table)) for s in ss)
print(*flat)

{'B'} {'D'} set() set() {'A'} set() set() {'c'}

请注意,zip、ma​​p 和 reversed 都是迭代器,因此您实际上是在按所需顺序进行迭代(而不是为行创建反向列表或临时反转矩阵)


推荐阅读