【问题标题】:Iterate through a list of list in the form of a matrix but avoid a set of columns以矩阵形式遍历列表列表,但避免使用一组列
【发布时间】:2016-11-02 15:00:20
【问题描述】:

所以我有一个列表:-

a = [[1,2,3,4],[5,6,7,8],[4,5,6,7]]

我想遍历内容并避免某个列。所以我一般的for循环结构如下:

for i in range (0,len(a[0])):

现在据我所知,我还需要一个条件来避开某个列。我该怎么做?

另一种方法是删除整个列并将其附加到末尾。

所以删除列后:

a = [[1,2,4],[5,6,8],[4,5,7]]

添加后:

a = [[1,2,4,3],[5,6,8,7],[4,5,7,6]]

我可以使用 numpy 来执行此操作。所以我正在从 numpy.xml 中删除所需的列。 这是一个工作代码:

a = [[1,2,3,4],[5,6,7,8],[4,5,6,7]]
a_np= np.array(a)
a_col_data = a_np[:,2]
a1 = np.delete(a_np, 2 , axis = 1)

现在我的 a_col_data 是 [3 7 6]

我无法以这种格式追加。我需要这种格式[[3],[7],[6]] 然后我可以使用以下代码将其作为最后一列附加到:

np.append(a_np, a_col_data, axis=1)

现在我面临的这种方法存在问题: 如何将列表[3 7 6] 转换为[[3],[7],[6]]? 考虑到我有一个包含 150 列和 3000 行的列表,我无法手动完成。

另一个问题是 np.array 将列表转换为类似结构的纯矩阵,删除元素之间的“,”。我想找回列表结构。 例如:

a = [[1,2,4],[5,6,8],[4,5,7]]
a_np = [[1 2 4][5 6 8][4 5 7]]

如何将 a_np 再次转换为 a?

编辑:

好的,我刚刚浏览了 stackoverflow,我找到了解决方案。我可以简单地执行以下操作将其转换回来:

a_np.tolist()

【问题讨论】:

    标签: python python-2.7 list numpy matrix


    【解决方案1】:

    有很多方法可以做到这一点。

    你可以给a_col_data添加一个额外的轴:

    >>> a_np2 = np.append(a1, a_col_data[:, np.newaxis], axis=1)
    >>> a_np2
    array([[1, 2, 4, 3],
           [5, 6, 8, 7],
           [4, 5, 7, 6]])
    >>> a_np2.tolist()
    [[1, 2, 4, 3], [5, 6, 8, 7], [4, 5, 7, 6]]
    

    或者你可以通过使用enumerate来避免走 numpy 路线:

    a = [[1,2,3,4],[5,6,7,8],[4,5,6,7]]
    for i in a:
        for j, x in enumerate(i):
            if j == 2:
                continue
            ...
    

    【讨论】:

    • 感谢您的快速回复。一个快速查询:- 如果我的列表是 = [[1.0,2.0,3.0],[4.0,5.0,6.0] .....]。如何删除小数并使其成为 = [[1,2,3],[4,5,6] .....]
    • @Skyfail 懒惰的回答np.array(a).astype(int).tolist()更好的答案:使用嵌套列表推导并将每个浮点数转换为整数。如果有帮助,您也可以接受答案。
    • 再次感谢。但是为什么嵌套列表理解方法比您提供的惰性答案更好?
    • 转换成np.array的开销是第一种方法需要考虑的
    【解决方案2】:

    所以你有一个列表列表并想要一个列表列表作为回报,每个列表都缺少一个条目?假设您要删除每个子列表索引 2 处的项目:

    a = [[x for i, x in enumerate(sublist) is i != 2] for sublist in a]
    

    【讨论】:

      【解决方案3】:

      如果你想要数组中的第 0、1 和 2 列,你可以这样做,例如

      a = np.array([[1,2,3,4],[5,6,7,8],[4,5,6,7]])
      for col in a[:,[0,1,2]].T:
          print col
      

      【讨论】:

        猜你喜欢
        • 2018-02-16
        • 2017-05-30
        • 2017-10-19
        • 2023-03-07
        • 1970-01-01
        • 2017-05-03
        • 1970-01-01
        • 1970-01-01
        • 2013-10-01
        相关资源
        最近更新 更多