我很难理解为什么我的功能没有返回列表的反转版本。我花了很长时间试图理解为什么和我碰壁:---它只按升序返回我的列表。
letters = 'abcdefghijk'
numbers = '123456'
dict1 = {}
def reverseOrder(listing):
lst2 = []
lst2.append(listing)
lst2.sort(reverse=True)
return lst2
for l, n in zip(letters, numbers):
dict1.update({l:n})
lst1 = list(dict1) + list(dict1.values())
lst1.sort(key=reverseOrder)
print(lst1)
答案 0 :(得分:1)
传递给list.sort
的key
函数有一个非常特定的目的:
key
指定一个参数的函数,用于从每个列表元素中提取比较键(例如,key=str.lower
)。对应于列表中每个项目的密钥计算一次,然后用于整个分类过程。默认值None
表示直接对列表项进行排序,而不计算单独的键值。
因此该函数应该接受单个列表元素,然后返回一个确定其排序的键与其他元素相比。
例如,如果您想按内容的长度对列表进行排序,可以这样做:
def lengthOfItem (item):
return len(item)
lst.sort(key=lengthOfItem)
由于该函数只接受单个项,因此它不适合排序您需要比较两个元素以建立关系的行为。但这些排序效率很低,所以你应该避免使用它们。
在您的情况下,您似乎想要撤消列表。在这种情况下,您只需使用list.reverse()
。
答案 1 :(得分:0)
您以无效的方式使用sort
功能。
以下是sort
函数的定义(来自builtins.py
):
def sort(self, key=None, reverse=False): # real signature unknown; restored from __doc__
""" L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE* """
pass
如果必须对项目进行排序存在“歧义”,则必须使用 key
参数,例如项目是元组,词典等。
示例:
lst = [(1, 2), (2, 1)]
lst.sort(key=lambda x: x[0]) # lst = [(1, 2), (2, 1)]
lst.sort(key=lambda x: x[1]) # lst = [(2, 1), (1, 2)]
虽然不太确定你想要这个部分:
for l, n in zip(letters, numbers):
dict1.update({l:n})
lst1 = list(dict1) + list(dict1.values())
好像你想要一个包含所有数字和字母的列表,但你这样做很奇怪。
编辑:我已更新答案。