【问题标题】:sorting of an array in nested array and their occurence嵌套数组中数组的排序及其出现
【发布时间】:2021-11-15 20:47:08
【问题描述】:

我有嵌套循环,例如

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

有没有办法对它们进行独立排序?收到类似的东西:

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

我还想知道是否有任何排序的内部数组最常出现。

【问题讨论】:

  • arr = [sorted(x) for x in arr]
  • 我也想知道是否有任何排序的内部数组最常出现 - 请解释一下您的意思。
  • 我的意思是如果例如在 arr [[2,3,4],[4,7,9],[1,5,8],[4,7,9]]数组 [4,7,9] 出现两次,在这种情况下,最好以出现次数等于 2 的方式显示

标签: python multidimensional-array find-occurrences


【解决方案1】:

我也想知道是否有任何排序的内部数组最常出现

from collections import Counter

arr = [[2, 5, 4, 6], [7, 3, 1, 8], [3, 9, 1, 1], [2, 4, 3, 2], [2, 5, 4, 6]]
tuple_arr = [tuple(x) for x in arr]
counter: Counter = Counter(tuple_arr)
print(counter)

输出

Counter({(2, 5, 4, 6): 2, (7, 3, 1, 8): 1, (3, 9, 1, 1): 1, (2, 4, 3, 2): 1})

【讨论】:

    【解决方案2】:

    您可以使用 Python 的列表推导式。

    new_arr = [sorted(x) for x in arr]
    

    编辑:

    抱歉,我没有看到你的第二个问题。可能有一个更短的代码,但我尽力了。我也不太确定,你到底想做什么。但是看看下面的代码:

    # input; [2,2,3,4] occurs twice
    arr = [[2,4,5,6],[1,3,7,8],[1,1,3,9],[2,2,3,4],[2,2,3,4]]
    
    # sort each list in list
    arr = [sorted(x) for x in arr]
    print(arr)
    
    # parse lists to tuples, cause lists are not hashable; needed to get a set
    arr = [tuple(x) for x in arr]
    print(arr)
    
    # write a list of the inside list and its corresponding count
    arr_count_list = [[x,arr.count(x)] for x in set(arr)]
    print(arr_count_list)
    
    # consider implementing the final arr as a dictionary
    arr_count_dict = {x:arr.count(x) for x in set(arr)}
    print(arr_count_dict)
    
    # get the key with the highest value
    most_occuring = max(arr_count_dict, key=arr_count_dict.get)
    
    # print the results
    print("This list occurs most often: {}".format(str(most_occuring)))
    print("It occurs {} times".format(arr_count_dict.get(most_occuring)))
    

    【讨论】:

      【解决方案3】:

      没有列表理解

      arr = [[2,5,4,6],[7,3,1,8],[3,9,1,1],[2,4,3,2]]
      for i in arr:
          i.sort()
      print(arr)
      

      列表理解由 balderman 给出

      【讨论】:

        【解决方案4】:

        只是简单的旧方法

        new_list = []
        for x in arr:
            new_list.append(sorted(x))
        
        print(new_list)
        
        
        [[2, 4, 5, 6], [1, 3, 7, 8], [1, 1, 3, 9], [2, 2, 3, 4]]
        

        【讨论】:

          【解决方案5】:

          或者只是:

          arr = list(map(sorted, arr))
          

          输出:

          >>> arr
          [[2, 4, 5, 6], [1, 3, 7, 8], [1, 1, 3, 9], [2, 2, 3, 4]]
          

          更新你的评论:

          arr = [[3,2,4],[7,4,9],[5,1,8],[9,7,4]]
          arr = list((map(sorted, arr)))
          [list(item) for item in set(tuple(a) for a in arr)]
          

          输出:

          [[4, 7, 9], [1, 5, 8], [2, 3, 4]]
          

          【讨论】:

          • 谢谢,有没有办法检查它们的出现?我的意思是,如果例如在 arr [[2,3,4],[4,7,9],[1,5,8],[4,7,9]] 数组 [4,7, 9] 出现两次,在这种情况下最好以出现次数等于 2 的方式显示
          • @prs 是的,你可以,编辑答案
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-07
          • 2021-06-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-07
          • 1970-01-01
          相关资源
          最近更新 更多