我try 先按第一个元素对元组列表进行排序,然后按第二个元素排序(如果存在),然后再按第三个元素排序(如果存在).

由于元组的长度不同,其中一些元组没有第二个或/和第三个元素,因此错误显示为:IndexError: list index out of range on line undefined.

list_to_sort = [(1, 11), (2, 0, 0), (1, 2), (2), (0, 1), (1, 2, 1), (1, 1, 1), (2, 0)]

预期输出:

[(0, 1), (1, 1, 1), (1, 2), (1, 2, 1), (1, 11), (2), (2, 0), (2, 0, 0)]

我已经try 过了,但出现了相同的错误:IndexError: list index out of range on line undefined.

1.

print(sorted(list_to_sort,key=lambda  x:(x[0], x[1], x[2])))
print(sorted(list_to_sort,key=lambda  x:(x[0],(x[1] is not None, x[1]), (x[2] is not None, x[2])))
def check(x):
  if x:
    return x
  else:
    return ""

print(sorted(list_to_sort,key=lambda  x:(x[0], check(x[1]), check(x[2])))

我想让代码判断第二个/第三个元素是否在那里,如果是,就用它的值排序,如果不是,假设它是空的或零.

这看起来很简单,但我别无 Select .欢迎提出任何建议:)提前谢谢!

推荐答案

我认为您正在寻找基本的、默认的对元组列表的排序,但是列表中的某一项可能看起来像元组(2),但实际上是int.如果它是一个元组,它看起来更像(2,).

如果该项目是一个元组,那么您可以这样做:

print(sorted(list_to_sort))

因此,这给了我们一个如何继续进行的线索.让我们暂时假设您希望该项为int,但希望将其作为元组进行排序.我们可以try :

print(sorted(list_to_sort, key=lambda x: x if isinstance(x, tuple) else (x,)))

这将为您提供:

[(0, 1), (1, 1, 1), (1, 2), (1, 2, 1), (1, 11), 2, (2, 0), (2, 0, 0)]

Python相关问答推荐

X射线扫描显示Docker中的pip漏洞,尽管图像中未安装pip

Tkinter -控制调色板的位置

pandas DataFrame中类型转换混乱

如何在超时的情况下同步运行Matplolib服务器端?该过程随机挂起

Python无法在已导入的目录中看到新模块

如何计算两极打印机中 * 所有列 * 的出现次数?

Excel图表-使用openpyxl更改水平轴与Y轴相交的位置(Python)

更改键盘按钮进入'

如何获取TFIDF Transformer中的值?

删除字符串中第一次出现单词后的所有内容

numpy卷积与有效

运输问题分支定界法&

有没有一种方法可以从python的pussompy比较结果中提取文本?

在极性中创建条件累积和

连接一个rabrame和另一个1d rabrame不是问题,但当使用[...]'运算符会产生不同的结果

转换为浮点,pandas字符串列,混合千和十进制分隔符

有没有一种ONE—LINER的方法给一个框架的每一行一个由整数和字符串组成的唯一id?

使用Python从URL下载Excel文件

计算天数

Python中的变量每次增加超过1