我正在尝试编写代码,可以按未知的键数对列表进行排序,每个键都有一个关联的布尔值,对应于排序是升序还是降序。在
我让它按升序或降序对所有键进行排序,如下所示:
import operator
def sort2D(table, *params):
table.sort(key=operator.itemgetter(*params), reverse = True)
return table
table = sort2D(table, *listOfKeys)
不过,我不知道如何将布尔值输入该函数。当我尝试为第二个输入列表执行类似的代码时,出现语法错误,如下所示:
^{pr2}$我可以判断错误是因为我在函数中误用了*、*params和*args来输入一个列表,但是我不知道如果没有类似的东西,我怎么能输入第二个列表。是否可以将第二个列表输入到我拥有的函数中,或者我必须做一些完全不同的事情来完成我想要的?在
编辑:我希望输入和输出的示例如下所示:
['Smith', 'Bob', 4, 3.75, 'Blue']
['Jones', 'Tom', 17, 0.44, 'Blue']
['Smith', 'John', 3, 2.22, 'Yellow']
['Jones', 'Drew', 5, 6.74, 'Red']
如果按姓氏降序排序,然后按整数升序排序,则与列对应的params将为[0,2],bools将为[True,False]。输出如下所示:
['Smith', 'John', 3, 2.22, 'Yellow']
['Smith', 'Bob', 4, 3.75, 'Blue']
['Jones', 'Drew', 5, 6.74, 'Red']
['Jones', 'Tom', 17, 0.44, 'Blue']
一个函数不能有两个参数。无论如何,也不能将多个
reverse=
值应用于单个sort
调用。在不幸的是,使用多个
reverse
值(不知道可能被反转的键是字符串、数字、元组等)的唯一干净、完全通用的方法是执行多个sort
传递(相反:最重要的键必须是最后排序的键)。在所以…:
如果你知道你要排序的键(项),例如它们都是数字,你可以准备一个单独的
key
函数,然后进行单次排序(将符号改为对应于相应反转bool的真值的数字)。在但是对于一般键来说,这是一个非常具有挑战性的问题,例如,对于元组,我甚至想不出一种有效的方法来实现它!-)在
即使只是针对字符串,我也相信至少是一个Google访谈级别的问题“定义一个函数}
^{pr2}$rev
,这样对于任何一个两个字符串s1
和{“”
(实际上,在这个完全通用的公式中,它比我在记下它时所想的要难得多。。。!-)在
在现实生活中,面对这样一个难题,我会做多次传球,判令胜利,然后出发家庭:-)在
相关问题 更多 >
编程相关推荐