【问题标题】:how to switch columns of a list with rows of another list in python如何在python中用另一个列表的行切换列表的列
【发布时间】:2021-03-30 13:50:58
【问题描述】:

我有一个包含一些 numpy 数组的列表。我想切换此列表的行和列。我的输入列表是:

array=[[np.array([[1.,2.]]), np.array([[5.,6.]]), np.array([[7.,8.]])],\
       [np.array([[10.,20.]]), np.array([[50.,60.]]), np.array([[70.,80.]])],\
       [np.array([[100.,200.]]), np.array([[500.,600.]]), np.array([[700.,800.]])]]

我的array 是一个包含三个列表的列表。每个列表也有三个 numpy 数组。我想重新排列这三个列表。我希望我的第一个列表是第一个列表的第一个数组,第二个列表的第一个数组和第三个列表的第一个数组。在第二个列表中,我想要第一个列表的第二个数组,第二个列表的第二个数组和第三个列表的第二个数组。对于第三个列表,我想拥有第一、第二和第三个列表的第三个数组。我的意思是我想得到:

[[np.array([[1.,2.]]), np.array([[10.,20.]]), np.array([[100.,200.]])],\
 [np.array([[5.,6.]]), np.array([[50.,60.]]), np.array([[500.,600.]])],\
 [np.array([[7.,8.]]), np.array([[70.,80.]]), np.array([[700.,800.]])]]

我试过了:

switched=[]
for i in range (len(array)-1):
    for j in range (len (array[i])):
        switched.append ([array[i][j], array[i+1][j]])

但它并没有给我想要的东西。 如果有人帮助我解决此问题,我将不胜感激。

【问题讨论】:

    标签: python arrays list numpy


    【解决方案1】:

    如果您的列表大小相同,switched = [[array[j][i] for j in range(len(array))] for i in range(len(array[0]))] 应该可以解决问题。

    【讨论】:

    • 亲爱的@TUI 爱好者,感谢您的智能解决方案。当我尝试它时,我面临错误。你能检查一下吗?我认为一些错别字或括号可能是问题的根源。
    • 你能把你的错误发给我吗?无法复制
    • 这是错误:SyntaxError: closing parenthesis ']' does not match opening parenthesis '('。我解决了它,但结果与我的预期不同。
    • @Ali_d 你试过我的修正版了吗?好像对我有用
    【解决方案2】:

    1:可以使用python的zip内置函数来切换行列。

    array_tranformed = [list(column) for column in zip(*array)]
    

    【讨论】:

    • 亲爱的@Vincent Bénet, 感谢您为我的问题提供帮助。当我尝试您的解决方案时,我得到的输出与我的预期不同。你能检查一下吗?
    • 嗨@Ali_d 答案已编辑(删除了一个解决方案并更改了另一个。我在与您输入的列表不同的列表上进行了测试。抱歉!这个解决方案比绿色检查的解决方案更快...... ^ ^(复杂度少一个)
    猜你喜欢
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 2010-11-03
    • 2021-08-09
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    相关资源
    最近更新 更多