簡體   English   中英

如何對同時包含數字和字母的列表進行排序?

[英]How to sort a list that contains both numbers and letters?

我正在嘗試加入並排序一些包含數字和字母的列表

例如:

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))  )

有幾件事需要澄清:

  • 集合是無序的,做list(set(thing))會給你一個“隨機”順序的列表
  • reversed()完全符合它的要求,它使您能夠以相反的順序進行迭代,它不進行任何排序。 如果要排序,請使用sorted()

如果我理解正確,您希望您的字符串首先出現,然后是排序的“數字”(實際上是包含數字表示的字符串)。

為此,您需要一個適當的排序功能。 像下面這樣的東西應該工作:

>>> 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 與字符串作為鍵並將數字列表作為值可能更適合存儲它,並且更易於排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM