Python 如何对同时包含数字和字母的列表进行排序?

Python 如何对同时包含数字和字母的列表进行排序?,python,Python,我正在尝试加入并排序一些包含数字和字母的列表 例如: l1 = ['AF', '0.167'] l2 = ['AF', '1'] l3 = ['AC', '1'] l4 = ['AC', '6'] 如果我把l1和l2连接在一起,l3和l4连接在一起,把它们颠倒过来,希望字母先出现,我会得到两个不同的结果 ['0.167', 'AF', '1'] ['1', 'AF', '0.167'] -------------------- ['6', '1', 'AC'] ['AC', '1', '6'

我正在尝试加入并排序一些包含数字和字母的列表

例如:

l1 = ['AF', '0.167']
l2 = ['AF', '1']

l3 = ['AC', '1']
l4 = ['AC', '6']
如果我把l1和l2连接在一起,l3和l4连接在一起,把它们颠倒过来,希望字母先出现,我会得到两个不同的结果

['0.167', 'AF', '1']
['1', 'AF', '0.167']
--------------------
['6', '1', 'AC']
['AC', '1', '6']
为什么第二个可以正确排序,但第一个只能切换数字的位置

如果我希望得到:new1=['AF',0.167,1'],new2=['AC',1,6'] 如何更改代码

代码如下:

l1 = ['AF', '0.167']
l2 = ['AF', '1']
l3 = ['AC', '1']
l4 = ['AC', '6']
new1 = l1 + l2
new1 = list(set(new1))
new2 = l3 + l4
new2 = list(set(new2))

list(reversed(new1))  
list(reversed(new2))

print( new1 )
print(list(reversed(new1))  )
print('--------------------')
print( new2 )
print(list(reversed(new2))  )

有几件事需要澄清:

集合是无序的,执行listsetthing将给您一个随机顺序的列表 完全按照它听起来的样子,它使您能够以相反的顺序迭代,它不做任何排序。如果需要排序,请使用 如果我理解正确,您希望字符串排在第一位,然后是排序后的数字,这些数字实际上是包含数字表示的字符串

为此,您需要一个适当的排序函数。类似于以下的方法应该可以工作:

>>> test1 = ['0.167', 'AF', '1']
>>> test2 = ['6', '1', 'AC']
>>> sort_key = lambda s: float('-inf') if s.isalpha() else float(s)
>>> sorted(test1, key=sort_key)
['AF', '0.167', '1']
>>> sorted(test2, key=sort_key)
['AC', '1', '6']

根据您的数据,使用以字符串为键的dict和以数字列表为值的dict存储数据可能更有意义,而且排序也更简单。

listset。。。不保留原始列表的顺序。如果是,那是偶然的。我理解正确吗,预期结果是l1+l2,但删除了重复项?预期结果是:new1=['AF',0.167,1'],new2=['AC',1,6'],我的意思是,一般情况下的预期结果。一般来说,什么是有效输入,转换逻辑是什么?如果它包含日期,如:2019-01-01和2020-11-11,该怎么办?您需要根据数据调整关键功能。通常,数据越不统一,关键函数就越复杂。几乎涵盖了你需要知道的一切。