Re: [問題] list的切割與sort

作者: thefattiger (LT)   2018-10-08 16:05:29
※ 引述《Xiumpt (進來看熱鬧)》之銘言:
: 抱歉其實不知道標題該怎麼打才好形容我的問題
: list A:[ ['19A', '42A'], ['1A', '18A'], ['7C'] ]
: 希望的結果:
: 1. 將數字與英文分開處理
: 2. 有兩個以上的元素再以數字大小進行排序
: 切割的部分 本來用
: for j in A:
: B = re.findall(r'[A-Za-z]+|\d+',j)
: CAlist_2.append(B)
: 但這樣結果只會得到混在一起的
: [ ['19', 'A'], ['42', 'A'], ['1', 'A'], ['18', 'A'], ['7', 'C'] ]
: 希望的結果:
: 1. 切割:
: [ [['19', 'A'], ['42', 'A']], [['1', 'A'], ['18', 'A']], ['7', 'C'] ]
: 2. 排序:
: [ [['42', 'A'], ['19', 'A']], [['18', 'A'], ['1', 'A']], ['7', 'C'] ]
: 感謝
data = [ ['42A', '19A'], ['18A', '1A','17B'], ['7C'] ]
#先用re.findall把英文跟數字分開, 假設只有一組match,不會有19A23BB這種
finder = lambda x:re.findall(r"(\d+)([a-zA-Z]+)",x)[0]
spliter = lambda x:list(map(finder,x))
#用map得到每組數據的結
splited = list(map(spliter,data))
#定義如何排序
ordering = lambda x:sorted(x,key=lambda y:-int(y[0]))
#用map得到排序結果
ordered = list(map(ordering,splited))
作者: Xiumpt (進來看熱鬧)   2018-10-08 19:59:00
謝謝大大
作者: cutekid (可愛小孩子)   2018-10-09 10:27:00
推(Y)

Links booklink

Contact Us: admin [ a t ] ucptt.com