python用zip、sort和lambda排序
时间: 2023-05-18 14:07:05 浏览: 284
可以使用以下代码进行排序:
```python
lst1 = [1, 3, 5]
lst2 = [2, 4, 6]
sorted_lst = sorted(zip(lst1, lst2), key=lambda x: x[0])
```
这里使用了 `zip` 将两个列表合并成一个元组列表,然后使用 `sorted` 进行排序,排序的关键字是元组的第一个元素,即 `lst1` 中的元素。最后得到的 `sorted_lst` 是一个按照 `lst1` 排序的元组列表。
相关问题
python怎么将二维数组进行排序
在Python中,将二维数组进行排序通常指的是对二维数组中的元素按照一定的规则进行排序。二维数组可以被看作是一个列表,列表中的每个元素本身也是一个列表。要对这样的结构进行排序,可以使用Python内置的`sorted()`函数或列表的`sort()`方法。这里有一些常用的方法来排序二维数组:
1. 按照二维数组中子列表的第一个元素排序:
```python
arr = [[3, 2], [1, 4], [5, 0]]
sorted_arr = sorted(arr, key=lambda x: x[0])
# 结果:[[1, 4], [3, 2], [5, 0]]
```
2. 按照二维数组中子列表的最后一个元素排序:
```python
arr = [[3, 2], [1, 4], [5, 0]]
sorted_arr = sorted(arr, key=lambda x: x[-1])
# 结果:[[5, 0], [3, 2], [1, 4]]
```
3. 根据子列表的长度进行排序:
```python
arr = [[3, 2], [1, 4, 5], [5, 0]]
sorted_arr = sorted(arr, key=len)
# 结果:[[3, 2], [5, 0], [1, 4, 5]]
```
4. 如果二维数组是一个矩阵,想要按行或按列排序,可以结合使用`zip()`函数和`sorted()`:
```python
arr = [[3, 2, 1], [4, 5, 6], [7, 8, 9]]
# 按行排序
sorted_arr = [list(x) for x in zip(*sorted(zip(*arr), key=lambda x: x[0]))]
# 结果:[[3, 2, 1], [4, 5, 6], [7, 8, 9]]
# 按列排序
sorted_arr = [list(x) for x in zip(*sorted(zip(*arr), key=lambda x: x[0], reverse=True))]
# 结果:[[7, 8, 9], [4, 5, 6], [3, 2, 1]]
```
5. 如果想要稳定排序,可以使用`sort()`方法对原数组进行就地排序:
```python
arr = [[3, 2], [1, 4], [5, 0]]
arr.sort(key=lambda x: x[0])
# 结果:arr 现在为 [[1, 4], [3, 2], [5, 0]]
```
请注意,排序函数的`key`参数是一个非常强大的工具,它允许你定义排序的具体规则,可以根据子列表的任何元素或元素的组合来进行排序。
sort_contours_xld联合排序
要联合排序contours,可以使用OpenCV中的`sort()`函数和自定义的比较函数来实现。下面是一个示例代码:
```python
import cv2
def sort_contours_xld(contours):
# 计算每个轮廓的x坐标的最小值
x_min = [cv2.minAreaRect(contour)[0][0] for contour in contours]
# 使用zip()函数将轮廓和对应的x坐标最小值打包在一起
contour_x_min = zip(contours, x_min)
# 根据x坐标最小值进行排序
sorted_contours = sorted(contour_x_min, key=lambda x: x[1])
# 解压缩排序后的结果
sorted_contours, _ = zip(*sorted_contours)
return sorted_contours
# 示例用法
contours = [...] # 假设这是你要排序的轮廓列表
sorted_contours = sort_contours_xld(contours)
```
在上面的示例中,`sort_contours_xld()`函数接受一个轮廓列表作为输入,并返回按照x坐标进行排序后的轮廓列表。该函数首先计算每个轮廓的最小外接矩形的中心点的x坐标,然后使用`zip()`函数将轮廓和对应的x坐标最小值打包在一起。接下来,使用`sorted()`函数对打包后的列表进行排序,排序的依据是x坐标最小值。最后,使用`zip()`函数解压缩排序后的结果,得到排序后的轮廓列表。
你可以根据自己的需求修改以上代码。希望对你有所帮助!如有任何疑问,请随时提问。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![py](https://img-home.csdnimg.cn/images/20210720083646.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)