【问题标题】:Python reorder lists inside lists [duplicate]Python在列表中重新排序列表[重复]
【发布时间】:2016-01-27 21:24:59
【问题描述】:

希望我能很好地解释这一点

List = [[['a','b','c'], [1,2,3], [7,8,9]],[['e','f','g'], [4,5,6], [1,2,3]]]

我想把所有的值都改成 yield

List = [[['a',1,7], ['b',2,8], ['c',3,9]], [['f',4,1], ['g',5,2], ['c',6,3]]]

所以本质上是 List[0][0]、List[1][0]、List[2][0] 等等。我已经尝试了很多东西,但我找不到让这个工作正常的写入组合。任何帮助将不胜感激

我尝试了太多的东西,但没有一个是特别有价值的,所以我暂时不提了。

【问题讨论】:

  • “f”和“g”怎么了?或者这是一个错字/复制粘贴错误?
  • 你可以使用numpy:import numpy as np; print([b.T for b in np.array([[['a','b','c'], [1,2,3], [7,8,9]],[['e','f','g'], [4,5,6], [1,2,3]]])])
  • 这是一个错字!并且 numpy 正在摇摆不定!

标签: python list


【解决方案1】:

使用拉链!

[[list(x) for x in zip(*sublist)] for sublist in List ]

或者,长度不等:

[map(None, *sublist) for sublist in List] # Python 2
[list(itertools.zip_longest(*sublist)) for sublist in List] # Python 3

如果您可以确保子列表的长度相等并且元组代替列表就足够了,那么:

[zip(*sublist) for sublist in List]

【讨论】:

  • 我认为只适用于 python 2
  • 不够。 zip 不会产生一个列表,而是一个元组。
  • 根据上述 cmets 编辑
  • 好的,但是你检查你的代码了吗?第一行在 python 3 上产生[['a', 1, 7], ['b', 2, 8], ['c', 3, 9], ['e', 4, 1], ['f', 5, 2], ['g', 6, 3]]
  • 部分我知道在没有其他理解的情况下添加另一个 for 语句是没有意义的
猜你喜欢
  • 2017-04-28
  • 2019-09-18
  • 2015-09-16
  • 1970-01-01
  • 2019-11-29
  • 2020-11-01
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多