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