【问题标题】:list contains arrays with same values列表包含具有相同值的数组
【发布时间】:2021-06-17 20:35:12
【问题描述】:

我对 python 很陌生,只是有一个非常简单的问题。 我有一个列表被替换为:

x = [array([100., 100.]),
 array([119, 119]),
 array([143, 143]),
 array([171, 171]),
 array([204, 204])]

我想创建一个列表

b = [100, 119, 143, 171, 204]

我尝试了flatten,但无法删除相同的值和“数组”。我该怎么办?

【问题讨论】:

  • 这能回答你的问题吗? Flattening a list of NumPy arrays?
  • 你是如何“尝试flatten”的?
  • @Mushif Ali Nawaz 谢谢,我尝试了 np.array(x).flatten().tolist(),然后得到 [119,119,143,143,171,171,204,204]。那么如何删除重复的值?
  • 为什么100 不能出现在结果中?
  • 这是一个错字。我刚变了。问题已解决,谢谢!

标签: python arrays list numpy


【解决方案1】:

我认为你的结果需要 100。如果是这样的话, 你可以试试下面:

>>> list(set(array(x).flatten()))
[100.0, 171.0, 204.0, 143.0, 119.0]

【讨论】:

    【解决方案2】:

    np.concatenateset 一起使用

    list(set(np.concatenate(x)))
    

    【讨论】:

      【解决方案3】:

      我尝试先复制您的列表:

      import numpy as np
      
      x = [np.array([100., 100.]),
          np.array([119, 119]),
          np.array([143, 143]),
          np.array([171, 171]),
          np.array([204, 204])]
      

      您可以使用以下方法展平您的列表:

      np.concatenate(x).ravel().tolist()
      

      输出:

      [100.0, 100.0, 119.0, 119.0, 143.0, 143.0, 171.0, 171.0, 204.0, 204.0]
      

      【讨论】:

        【解决方案4】:

        所以让我确保我正确理解了你, 你有:

        x = [array([100., 100.]), array([119, 119]), array([143, 143]), 
            array([171, 171]), array([204, 204])]
        

        其中 x 有 2 个重复元素。

        你想要:

        b = [100, 119, 143, 171, 204]
        

        其中 b 仅包含 x 中每个数组的第一个(或第二个)元素。

        我相信有一些库 (itertools) 可以做到这一点,但这里有一个可以快速实现的简单方法:

        方法一(循环)

        b = []
        
        for arr in x:
            b.append(arr[0])
        

        方法 2(列表理解)

        b = [arr[0] for arr in x]
        

        【讨论】:

        • 谢谢!是的,这就是我想要的。如果我有一个很长的列表(比如 1000 个),其中包含像上面这样带有 2 个重复值的数组,方法 1 会改变输出中数字的顺序吗?
        • 不,这两种方法都不会改变顺序。两者都在做完全相同的事情,但方法 2 更简洁易读。两者都将按照“x”中元素的顺序迭代“x”。在“x”中的每个数组中有两个以上的值并且值不同也不会影响。但是,请确保 "x" 中的所有数组长度相同,这是为了避免从不存在第 4 项的数组中获取第 4 项。
        【解决方案5】:

        首先你必须将列表转换为数组,然后像这样对数组进行切片

        import numpy as np
        b = np.array(x)
        c = b[:,0]
        print(c)
        

        它给 [100。 119. 143. 171. 204.]

        【讨论】:

          猜你喜欢
          • 2019-12-15
          • 1970-01-01
          • 1970-01-01
          • 2020-01-26
          • 2021-01-13
          • 1970-01-01
          • 2019-07-06
          • 2020-05-23
          • 1970-01-01
          相关资源
          最近更新 更多