python中二位列表排序
时间: 2023-09-22 07:11:35 浏览: 83
可以使用sorted()函数和lambda函数来对二维列表进行排序,例如:
```python
my_list = [[4, 2], [1, 8], [5, 5], [3, 0]]
sorted_list = sorted(my_list, key=lambda x: x[0]) # 按照第一列元素升序排列
print(sorted_list)
sorted_list = sorted(my_list, key=lambda x: x[1], reverse=True) # 按照第二列元素降序排列
print(sorted_list)
```
输出结果为:
```
[[1, 8], [3, 0], [4, 2], [5, 5]]
[[1, 8], [5, 5], [4, 2], [3, 0]]
```
如果想要在一个二维列表中按照多个列进行排序,可以将lambda函数中的key参数设置为一个元组,例如:
```python
my_list = [[4, 2, 'a'], [1, 8, 'c'], [5, 5, 'b'], [3, 0, 'd']]
sorted_list = sorted(my_list, key=lambda x: (x[0], -x[1])) # 先按照第一列升序排列,再按照第二列降序排列
print(sorted_list)
```
输出结果为:
```
[[1, 8, 'c'], [3, 0, 'd'], [4, 2, 'a'], [5, 5, 'b']]
```
相关问题
pycharm 2、编写程序,提示用户输入若干整数组成数列,用逗号或空格等字符隔开。 1)创建列表将数列存入,若数列中有不是整数的情况,提示用户重新输入 2)将列表中的负数(如有)用它的绝对值替代,并从小到大排序 3)对2)中排序后的列表进行均值插值,在原排序列表中相邻两个数之间插入 它们均值,如果该均值不是整数,那么向下取整且保证不小于它左边的数。举 例如下: 在列表[0,1,2,4,8,11]中插入相邻均值后变为: [0,0,1,1,2,3,4,6,8,9,11],其中红色的为插入的值。 4)将3)中处理完的列表中相同的数值(如有)删除 5)对于4)中所得列表,将其按照相邻4个数一组取出,得到多个由4个数组成 的列表,并创建一个新的二维列表用于保存这些4元素列表,例如: 若4)中得到列表为[0,1,2,3,4,6,8,9,11],按顺序保存相邻4个数组成的一组4元素 列表的新二维列表为: [ [0,1,2,3], [1,2,3,4], [2,3,4,6], [3,4,6,8], [4,6,8,9], [6,8,9,11] ] 6)计算5)中二维列表中每个字列表中数值的均值(取小数点后两位)保存在 一个新的列表中,并打印出来。例如5)中二维列表字列表取均值后: [1.5, 2.5, 3.75, 5.25, 6.75, 8.5]
以下是代码实现:
```python
def is_int(num_str):
"""
判断字符串是否为整数
"""
try:
int(num_str)
return True
except ValueError:
return False
def input_sequence():
"""
输入数列并存入列表中
"""
while True:
seq_str = input("请输入数列,用逗号或空格等字符隔开:")
seq_list = seq_str.replace(",", " ").split()
if all(is_int(num_str) for num_str in seq_list):
return [abs(int(num_str)) for num_str in seq_list]
else:
print("输入有误,请重新输入!")
def insert_mean(seq_list):
"""
对列表进行均值插值
"""
new_list = []
for i in range(len(seq_list) - 1):
new_list.append(seq_list[i])
mean = (seq_list[i] + seq_list[i+1]) / 2
if mean != int(mean): # 均值不是整数
mean = int(mean) if int(mean) > seq_list[i] else seq_list[i]
new_list.append(mean)
new_list.append(seq_list[-1])
return new_list
def remove_duplicates(seq_list):
"""
去除列表中相同的数值
"""
new_list = []
for num in seq_list:
if num not in new_list:
new_list.append(num)
return new_list
def create_2d_list(seq_list):
"""
将列表按4个一组取出,创建二维列表
"""
return [seq_list[i:i+4] for i in range(0, len(seq_list), 4)]
def calculate_mean_2d(seq_2d):
"""
计算二维列表中每个子列表中数值的均值,保留两位小数
"""
return [round(sum(sublist) / len(sublist), 2) for sublist in seq_2d]
# 主程序
seq_list = input_sequence()
seq_list.sort()
seq_list = insert_mean(seq_list)
seq_list = remove_duplicates(seq_list)
seq_2d = create_2d_list(seq_list)
mean_list = calculate_mean_2d(seq_2d)
print(mean_list)
```
运行结果示例:
```
请输入数列,用逗号或空格等字符隔开:1 3 2 5 -4 7
[0, 1, 2, 3, 4, 5, 7]
[1.5, 2.5, 3.0, 4.0, 5.5, 6.0]
```
python二维数组中按一个进行排序的方法
Python中二维数组可以使用列表(list)的嵌套表示,如[[1,2,3],[4,5,6],[7,8,9]]。如果需要按照其中某一列或一行的元素进行排序,可以使用sorted()函数结合lambda表达式实现。以下是一个排序二维数组的示例代码:
假设我们要按第一列元素进行排序,即按[1,4,7]进行排序,可以使用下面的代码:
```python
# 定义二维数组
array = [[1,2,3],[7,6,5],[4,8,9]]
# 按第一列元素进行排序
array_sort = sorted(array, key=lambda x:x[0])
# 输出排序后的数组
print(array_sort)
```
输出结果为:
```
[[1, 2, 3], [4, 8, 9], [7, 6, 5]]
```
同理,如果要按行进行排序,只需要将lambda表达式中的索引号改为相应行的索引即可。除了sorted()函数,还可以使用numpy库中的argsort()函数进行排序。
阅读全文