锁定老帖子 主题:有个很诡异的需求,向高手请教最优解
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-10-13
clist = ['a','b','b','b','c','c','d'] def map(clist): dic = {} zlist = [] for i in clist: dic[i] = clist.count(i) for key,value in dic.items(): if value == 1: zlist.append(key) else: zlist.append(key + '*' + str(value)) return zlist ';'.join(map(clist)) 来个python的,哈哈 |
|
返回顶楼 | |
发表时间:2006-10-14
遍历List,可以用Iterator,可以很方便地遍历,
用.equals进行对象比较就行了,相等则计数 |
|
返回顶楼 | |
发表时间:2006-10-14
有点像压缩。
|
|
返回顶楼 | |
发表时间:2006-10-15
Ruby的呼呼: (交互模式, >>代表输入命令,=>代表输出)
>>clist = %w{a b b b c c d} =>["a", "b", "b", "b", "c", "c", "d"] >>temp = {} >>clist.each{|i| temp[i].nil? ? temp[i] = 1 : temp[i] +=1} >>temp =>{"a"=>1, "b"=>3, "c"=>2, "d"=>1} >>temp.map{|k,v| v == 1 ? k : k + v.to_s}.join ';' =>"a;b3;c2;d" 写成一个函数的话: def count(list) temp = {} list.each{|i| temp[i].nil? ? temp[i] = 1 : temp[i] +=1} temp.map{|k,v| v == 1 ? k : k + v.to_s}.join ';' end |
|
返回顶楼 | |
发表时间:2006-10-15
可惜python不支持问号表达式,否则可以写成一行
import re def maketimes(w, s, u): if u: return '%s*%d' % (w, len(s)/len(u)+1) return w def parselist(str): return ';'.join([maketimes(w,s,u) for w,s,u in re.findall(r'(\w+)((,\1)*)', str)]) if __name__ == '__main__': print parselist('a,b,b,b,c,c,d') 另外,如果list里面是object的话,假设是通过其toString来比较是否相同,那么 if __name__ == '__main__': l = ['a', 'b', 'b', 'b', 'c', 'c', 'd'] print parselist(','.join(map(str, l))) |
|
返回顶楼 | |
发表时间:2006-12-25
javascript 风格:
var a=["a","b","b","b","c","c","d"]; var b={}; for(var c in a) { if(b[a[c]]) b[a[c]]++;else b[a[c]]=1; } var e=""; for(var d in b) { e+=d+(b[d]>1?("*"+b[d]):"")+";"; } alert(e); |
|
返回顶楼 | |
发表时间:2006-12-26
相当于一个最简单的压缩算法,没什么意思。
|
|
返回顶楼 | |