列出Python中的排序(转置)
我有任意列表,例如,这里有三个列表:列出Python中的排序(转置),python,list,python-3.x,sorting,transpose,Python,List,Python 3.x,Sorting,Transpose,我有任意列表,例如,这里有三个列表: a = [1,1,1,1] b = [2,2,2,2] c = [3,3,3,3] 我想把它们放在一起,得到如下输出: f_out = [1,2,3] g_out = [1,2,3] ... n_out = [1,2,3] 如您所见,我刚刚将“列”转换为“行” 问题是解决方案必须独立于列表长度 例如: a = [1,1] b = [2] c = [3,3,3] # output f_out = [1,2,3] g_out = [1,3] n_out =
a = [1,1,1,1]
b = [2,2,2,2]
c = [3,3,3,3]
我想把它们放在一起,得到如下输出:
f_out = [1,2,3]
g_out = [1,2,3]
...
n_out = [1,2,3]
如您所见,我刚刚将“列”转换为“行”
问题是解决方案必须独立于列表长度
例如:
a = [1,1]
b = [2]
c = [3,3,3]
# output
f_out = [1,2,3]
g_out = [1,3]
n_out = [3]
你可以用
如果列表中的None
是一个潜在的有效值,请使用sentinel而不是默认的None
:
>>> b = [None]
>>> sentinel = object()
>>> [[e for e in li if e is not sentinel] for li in zip_longest(a,b,c, fillvalue=sentinel)]
[[1, None, 3], [1, 3], [3]]
您可能需要查看
itertools.zip\u longest
——这几乎就是您想要的,您只需过滤掉多余的填充。@mgilson谢谢!我认为它可以帮助我:)对于其他人来说,只要盯着这个问题,想知道输入和输出之间的关系是什么,它就把它当作一个转置矩阵。从下面看,f
、g
和h
是将a
、b
和c
水平向上排列并从上到下读取的结果。对于python3@PadraicCunningham:接得好--已修复
>>> b = [None]
>>> sentinel = object()
>>> [[e for e in li if e is not sentinel] for li in zip_longest(a,b,c, fillvalue=sentinel)]
[[1, None, 3], [1, 3], [3]]