最近一直在搞数据结构问题,怎奈自己是编程小白啊,从来没有训练过数据结构算法的知识,想要实现一个功能真的很慢,不过还好,能实现。
需求:d = ['A02','A02','A02','A01','A03','A03','A01','A02','A02','A02','A03','B020304','B020304']
上面这个list中有很多重复的元素,我需要将其重复的都扩展下标,不重复的就扩展为_1即可。
d = ['A02','A02','A02','A01','A03','A03','A01','A02','A02','A02','A03','B020304']
q=[]
[q.append("%s_%s"%(i,k)) fori inset(d) fork inrange(1,d.count(i)+1)]
print(sorted(q))
这个是一种代码方式 很简洁,结果为
['A01_1', 'A01_2', 'A02_1', 'A02_2', 'A02_3', 'A02_4', 'A02_5', 'A02_6', 'A03_1', 'A03_2', 'A03_3', 'B020304_1']
将上面代码拆开写是:
d = ['A02','A02','A02','A01','A03','A03','A01','A02','A02','A02','A03','B020304']
q=[]
fori inset(d):
fork inrange(1,d.count(i)+1):
q.append(("%s_%s"%(i,k)))
print(sorted(q))
运行结果二者一样
后续补充:
上面的例子中还需有一点需要改动,可以看到,例子中使用set来求取不重复的元素集合的,但是求取集合后并不能按照原来的顺序求取,即set求取一个list的不重复元素集合时候元素顺序会被打乱。
func = lambdax, y: x ify inx elsex + [y]
del_dieci = reduce(func, [[], ] + d)
可以用这两行代码来取代set方法,其中del_dieci = reduce(func, [[], ] + d)和set(d)二者功能都是去重,只不过前者保留去重之前的顺序。