将列表按照相反顺序排序

13

我有一个列表 a = ['L', 'N', 'D'],我想将其中的元素顺序反转并得到 b = ['D','N','L']。我尝试了以下代码:

a = ['L', 'N', 'D']
b = sorted(a, reverse=True)
但输出结果为
b= ['N', 'L', 'D']

我错在哪里了?


sorted 是一个内置函数,它使用字母表算法对你的 str 元素进行排序,而不仅仅是反转你的序列。在你的内核中使用 help(sorted) 查看详细信息。 - Feishi
5个回答

21

您的错误在于使用 sorted,它会按元素顺序重新排列列表,并忽略元素以前的位置。应该使用

b = a[::-1]

该代码以逆序遍历列表a。您也可以使用

b = list(reversed(a))

尽管第一个版本更快,但需要考虑其他因素。


10

如果您想使用sorted()函数,可以指定索引作为排序依据:

b = sorted(a, key=a.index, reverse=True)

但这是毫无意义的努力,因为您不需要排序,因为排序已经建立,您只需要反转。如果您想要“反转”,请远离“排序”。如果您想要“排序”,那么尽管去做...但这不是这个问题所需要的。 - NeilG

5
如果您想进行原地反向排序,也可以这样做:
a.sort(reverse=True)

4
您还可以原地反转:
>>> a = ['L', 'N', 'D']

>>> a.reverse()

>>> a
['D', 'N', 'L']

但是请注意,它会改变列表,而不是创建(返回)一个新的列表。

0

你第一次差不多就做对了。试试这个:

#This will sort the list temporarily into reverse alphabetical order.
print(sorted(a, reverse=True)

#This will sort the list temporarily into reverse order.
print(sorted(a, reverse=False) 

你有没有仔细阅读问题?你有没有仔细阅读自己的答案?你有没有将结果与所需的进行比较?你和 OP 犯了同样的错误。需要使用 reversed,而不是 sorted。不需要排序。三个月后,你提供了一个额外的错误答案,回答了一个已经被解决的最简单的问题。请删除这个答案,为那些阅读并试图理解你所写内容的可怜新手们着想。 - NeilG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接