鱼C论坛

 找回密码
 立即注册
查看: 6698|回复: 47

[技术交流] Python:每日一题 95(答题领鱼币)

[复制链接]
发表于 2017-9-8 07:55:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有一个多行的字符串,要给每行的开头加上数字,这个数字代表其后紧接着的与本行内容相同的行数。例如
  1. FishC
  2. FishC
  3. FishC
  4. FishC
  5. Little turtle
  6. Little turtle
  7. Python
  8. FishC
复制代码

结果为
  1. (3)FishC
  2. (2)FishC
  3. (1)FishC
  4. (0)FishC
  5. (1)Little turtle
  6. (0)Little turtle
  7. (0)Python
  8. (0)FishC
复制代码



我的解法:
游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-8 08:49:40 | 显示全部楼层
how happy to this
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-8 08:52:13 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-8 09:47:03 | 显示全部楼层
  1. def addhead(list1):
  2.     count = 0
  3.     for i in range(0,len(list1)):
  4.         for j in range(i + 1,len(list1)):
  5.             if list1[j] == list1[i]:
  6.                 count += 1
  7.         print('(' + str(count) + ')' + list1[i])
  8.         count = 0


  9. list2 = ['FishC', 'FishC', 'FishC', 'FishC', 'Little turtle', 'Little turtle', 'Python', 'FishC']
  10. addhead(list2)
  11.         
复制代码

点评

有点小问题,前一个FishC应该是3、2、1、0  发表于 2017-9-8 12:14
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-8 09:49:46 | 显示全部楼层
本帖最后由 白牙 于 2017-9-8 10:58 编辑

list0= ['FishC', 'FishC', 'FishC', 'FishC', 'Little turtle', 'Little turtle', 'Python', 'FishC']
fuben_list=list0.split(',')
next = list1[-1]
list[-1]='(0)'+list1[-1]
for i in range(-2,-len(list1)-1,-1):
    if list1==next:
        count+=1
    else:
        count=0
    next=list1
    list0='(%d)'%conut+list
print('\n'.join(list1))

点评

这行报错:fuben_list=list0.split(',')  发表于 2017-9-8 12:15
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-8 10:21:28 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-8 11:02:17 | 显示全部楼层
  1. from itertools import groupby
  2. a = '''
  3. FishC
  4. FishC
  5. FishC
  6. FishC
  7. Little turtle
  8. Little turtle
  9. Python
  10. FishC
  11. '''
  12. s = [i for i in a.split('\n') if i != '']
  13. b = [list(g) for k, g in groupby(s)]
  14. for i in range(len(b)):
  15.     for j in range(len(b[i])):
  16.         print(len(b[i])-1-j,b[i][j])
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-8 11:05:16 | 显示全部楼层
  1. print("\n".join(f"({s[i+1:].count(c)}){c}" for i,c in enumerate(s)))
复制代码

你看我屌不屌
py3.6以上

点评

有点小问题,前一个FishC应该是3、2、1、0  发表于 2017-9-8 12:18
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-8 11:27:04 | 显示全部楼层
  1. s='''FishC
  2. FishC
  3. FishC
  4. FishC
  5. Little turtle
  6. Little turtle
  7. Python\nFishC'''
  8. ss=s.split('\n')
  9. t=[]#全是0
  10. for i in range(len(ss)):
  11.     t.append(0)


  12. for i in range(1,len(ss)):   
  13.     if ss[-i-1]==ss[-i]:
  14.         t[-i-1]=1+t[-i]
  15.         
  16. for i in range(len(ss)):
  17.     print("("+str(t[i])+")"+str(ss[i]))

  18. ————————————————————————————————
  19. 运行结果
  20. ===================== RESTART: D:\Python36-32\caogao.py =====================
  21. (3)FishC
  22. (2)FishC
  23. (1)FishC
  24. (0)FishC
  25. (1)Little turtle
  26. (0)Little turtle
  27. (0)Python
  28. (0)FishC
  29. >>>
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-8 13:15:32 | 显示全部楼层
  1. def addhead(list1):
  2.     count = 0
  3.     for i in range(0,len(list1)):
  4.         for j in range(i + 1,len(list1)):
  5.             if list1[j] == list1[i]:
  6.                 count += 1
  7.             else:
  8.                 break
  9.         print('(' + str(count) + ')' + list1[i])
  10.         count = 0


  11. list2 = ['FishC', 'FishC', 'FishC', 'FishC', 'Little turtle', 'Little turtle', 'Python', 'FishC']
  12. addhead(list2)
复制代码


之前没看到题目要求是紧跟着的

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-8 18:12:48 | 显示全部楼层
本帖最后由 jerryxjr1220 于 2017-9-8 18:17 编辑
  1. from itertools import groupby
  2. [print('(%d)%s' % (i, m)) for m,n in groupby(str1.split('\n')) for i in range(len(list(n))-1,-1,-1)]
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-8 18:46:18 | 显示全部楼层
按换行符拆分,分组,按成员的数量贴上数字,再拼接起来
  1. import itertools as it

  2. def fun(s):
  3.     lst = ["".join(("(%d)"%k, i,"\n")) for i,j in it.groupby(s.split('\n')) for k in range(len(list(j))-1,-1,-1)]
  4.     return "".join(lst)[:-1]
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-8 18:56:33 | 显示全部楼层
哈哈,天天都有鱼币那
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-9 00:19:16 | 显示全部楼层
  1. a = '''
  2. FishC
  3. FishC
  4. FishC
  5. FishC
  6. Little turtle
  7. Little turtle
  8. Python
  9. FishC
  10. '''
  11. list1 = a.split(sep='\n')[1:-1]
  12. list2 = ['(0)' + list1[-1]]
  13. for i in range(2,len(list1)+1):
  14.     if list1[-i] != list1[-i+1]:
  15.         list2.append('(0)' + list1[-i])
  16.         n = 0
  17.     else:
  18.         n += 1
  19.         list2.append('('+str(n)+')'+list1[-i])
  20. for each in list2[::-1]:
  21.     print(each)
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-9 13:48:35 | 显示全部楼层
  1. s1='''FishC
  2. FishC
  3. FishC
  4. FishC
  5. Little turtle
  6. Little turtle
  7. Python
  8. FishC'''
  9. s1=s1.split('\n')
  10. num=len(s1)
  11. for i in range(num):
  12.     count=0
  13.     for j in range(i+1,num):
  14.         if s1[i]==s1[j]:
  15.             count+=1
  16.         else:
  17.             break
  18.     s1[i]='('+str(count)+')'+s1[i]
  19. print('\n'.join(s1))
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-9 16:36:37 | 显示全部楼层
  1. def num(list,n):
  2.     m=0
  3.     if n==len(list)-1:
  4.         return m
  5.     for i in range(n+1,len(list)):
  6.         if list[i]==list[n]:
  7.             m+=1
  8.         else:
  9.             return m


  10. list='''FishC
  11. FishC
  12. FishC
  13. FishC
  14. Little turtle
  15. Little turtle
  16. Python
  17. FishC'''
  18. list=list.split('\n')
  19. for i in range(0,len(list)):
  20.       print '('+str(num(list,i))+')'+list[i]
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-9 18:03:42 | 显示全部楼层
(3)FishC
(2)FishC
(1)FishC
(0)FishC
(1)Little turtle
(0)Little turtle
(0)Python
(0)FishC
为什么FishC有两个0?
怎样换成升(降)序不要零?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-9 21:37:03 | 显示全部楼层
  1. words='''Fishc
  2. Fishc
  3. Fishc
  4. Fishc
  5. Little turtle
  6. Little turtle
  7. Python
  8. FishC'''
  9. from collections import Counter
  10. ss= dict(Counter(words.split('\n')))
  11. for keys in ss:
  12.         for i in range(ss[keys]):
  13.                 print('(%s)'%str(ss[keys]-i-1),keys)
复制代码


结果
  1. (3) Fishc
  2. (2) Fishc
  3. (1) Fishc
  4. (0) Fishc
  5. (1) Little turtle
  6. (0) Little turtle
  7. (0) Python
  8. (0) FishC
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-10 02:36:55 | 显示全部楼层
  1. strVal = """
  2.     FishC
  3.     FishC
  4.     FishC
  5.     FishC
  6.     Little turtle
  7.     Little turtle
  8.     Python
  9.     FishC
  10. """
  11. newStrVal = strVal.split('\n')
  12. strlist = [value.strip() for value in newStrVal if value.strip() is not '']
  13. length = len(strlist)

  14. for i in range(length):
  15.     j = i+1 if i+1<length else length
  16.     n = 0
  17.     for j in range(j,length):
  18.         if strlist[i] == strlist[j]:
  19.             n += 1
  20.         else:
  21.             break
  22.     print("(%d)%s" % (n,strlist[i]))
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-10 10:53:59 | 显示全部楼层
  1. def counteRepeatedLines(string):
  2.     '给多行字符串的每行开头加上紧随其后重复的行数'
  3.     counter = 0
  4.     lines = []
  5.     splits = string.split('\n')
  6.     for i in range(len(splits)):
  7.         if i+1 == len(splits) or splits[i] != splits[i+1]:
  8.             while counter > 0:
  9.                 lines.append('(%d)'% counter + splits[i])
  10.                 counter -= 1
  11.             lines.append('(0)' + splits[i])
  12.         else:
  13.             counter += 1
  14.     return '\n'.join(lines)

  15. print(counteRepeatedLines('FishC\nFishC\nFishC\nFishC\nLittle turtle\nLittle turtle\nPython\nFishC'))
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 04:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表