【问题标题】:How do i sort a 2D array or multiple arrays by the length of the array using bubble sort如何使用冒泡排序按数组的长度对二维数组或多个数组进行排序
【发布时间】:2021-11-24 20:29:54
【问题描述】:

尝试编写 Python 函数: def compare_lengths(x, y, z)

它将三个数组作为参数并检查它们的长度并按长度顺序将它们作为三元组返回。

例如,如果函数将 [1,2,3]、[10,20,30,40] 和 [65,32,7] 作为输入,希望它返回任一 ([1,2,3 ], [65,32,7], [10,20,30,40]) 或 ([65,32,7], [1,2,3], [10,20,30,40])

它可以作为任何一个:

Array = [1,2,3],[10,20,30,40],[65,32,7]

或:

x = [1,2,3]
y = [10,20,30,40]
z = [65,32,7]

但它需要排序为:

([1,2,3], [65,32,7], [10,20,30,40])

或:

([65,32,7], [1,2,3], [10,20,30,40])

使用冒泡排序

【问题讨论】:

  • 这是作业题吗?

标签: python arrays bubble-sort


【解决方案1】:

您可以这样做,唯一的区别是使用的条件是数组的长度而不是单个值。

n = len(arr)
for i in range(n):
    for j in range(n-i-1):
        if len(arr[j]) > len(arr[j+1]):
            arr[j], arr[j+1] = arr[j+1], arr[j]

【讨论】:

  • 感谢您告诉我。我已经更新了代码。前一个是我粗心的错误,我检查了其他几个案例,令人惊讶的是它们都有效。
  • 是的,它确实有效,虽然不是很明显。我实际上把它变成了question。不幸的是,许多人因错误地思考它的作用而忽略了它,但现在看来有人会做对了。
【解决方案2】:

您无需发明自己的排序算法或使用冒泡排序。可以通过 Python 的内置排序机制并将排序标准指定为 lambda 来完成:

arrays = [[1, 2, 3], [10, 20, 30, 40], [65, 32, 7], [3, 3]]
result = sorted(arrays, key=lambda arr: len(arr))
print(result)

或作为就地排序:

arrays = [[1, 2, 3], [10, 20, 30, 40], [65, 32, 7], [3, 3]]
arrays.sort(key=lambda arr: len(arr))
print(arrays)

如果你理解函数指针的概念,你甚至可以做得更短:

arrays = [[1, 2, 3], [10, 20, 30, 40], [65, 32, 7], [3, 3]]
result = sorted(arrays, key=len)
print(result)

【讨论】:

  • 当然arrays.sort(key=len) 会更直接。
猜你喜欢
  • 2019-04-14
  • 2022-10-06
  • 2010-12-23
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
相关资源
最近更新 更多