鱼C论坛

 找回密码
 立即注册
查看: 4806|回复: 30

[技术交流] Python:每日一题 65

[复制链接]
发表于 2017-6-14 10:57:40 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 ooxx7788 于 2017-6-14 18:19 编辑
  1. unique_in_order('AAAABBBCCDAABBB') == ['A', 'B', 'C', 'D', 'A', 'B']
  2. unique_in_order('ABBCcAD')         == ['A', 'B', 'C', 'c', 'A', 'D']
  3. unique_in_order([1,2,2,3,3])       == [1,2,3]
复制代码


我觉得例子已经足以说明一切了。注意,给定字符串可以为空。

其实出这个题我主要是想引入这个东西:

  1. >>> for key, group in itertools.groupby('AAABBBCCAAA'):
  2. ...     print(key, list(group))
  3. ...
  4. A ['A', 'A', 'A']
  5. B ['B', 'B', 'B']
  6. C ['C', 'C']
  7. A ['A', 'A', 'A']
复制代码


你们再看看呢。
游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-6-14 11:19:16 | 显示全部楼层
本帖最后由 jerryxjr1220 于 2017-6-14 11:22 编辑
  1. unique_in_order = lambda s: [s[0]] + [s[i] for i in range(1, len(s)) if s[i] != s[i - 1]] if s else []
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-14 20:02:37 | 显示全部楼层
大神的每日一题很好,学习到很多使用的知识
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-14 20:28:23 | 显示全部楼层
瓦蓝 发表于 2017-6-14 20:02
大神的每日一题很好,学习到很多使用的知识

但是你从来不写!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-15 10:34:01 | 显示全部楼层
啥隐藏内容更
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-15 11:47:26 | 显示全部楼层
  1. str = input('please enter a string:')

  2. unique = list(set(str))
  3. unique.sort()
  4. groupby = ''.join(unique)

  5. print (groupby)
复制代码

  1. please enter a string:AbsCd123S
  2. 123ACSbds
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-15 11:50:35 | 显示全部楼层

题目好像没有要求sort吧
而且使用set会去重,并不符合题目要求。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-15 14:28:02 | 显示全部楼层
ooxx7788 发表于 2017-6-15 11:50
题目好像没有要求sort吧
而且使用set会去重,并不符合题目要求。

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

使用道具 举报

发表于 2017-6-15 16:26:53 | 显示全部楼层
  1. >>> ss='AAAABBBCCDAABBB'
  2. >>> [a for a,b in zip(ss,ss[1:]+'\0')if a!=b]
  3. ['A', 'B', 'C', 'D', 'A', 'B']
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-15 16:34:13 | 显示全部楼层
本帖最后由 ooxx7788 于 2017-6-15 16:36 编辑


第3条可是包含的全部是整型的列表哦,你这个可跑不出来哦!
不过方法很666,涨姿势了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-15 16:38:57 | 显示全部楼层
ooxx7788 发表于 2017-6-15 16:34
第3条可是包含的全部是整型的列表哦,你这个可跑不出来哦!
不过方法很666,涨姿势了

道理是一样的,都是序列
这些都是写着玩~
知道原理就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-15 21:05:59 | 显示全部楼层
list1 = list('AAAABBBCCDAABBB')
list2 = []
for i in list1:
    if i not in list2:
        list2.append(i)
print(list2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-15 21:23:48 | 显示全部楼层
concrete 发表于 2017-6-15 21:05
list1 = list('AAAABBBCCDAABBB')
list2 = []
for i in list1:

自己执行下,看看结果对不对吧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-15 22:51:22 | 显示全部楼层
list1 = list('ABBBCcAD')
list2 = []
list2.append(list1[0])
a = 1
for i in list1:
    if i != list2[a-1]:
        list2.append(i)
        a += 1
print(list2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-15 22:53:58 | 显示全部楼层
from collections import OrderedDict
chs = 'ABBCcAD'
list(OrderedDict.fromkeys(chs))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-16 10:31:38 | 显示全部楼层
学习了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-16 17:20:47 | 显示全部楼层
000
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-16 17:35:21 | 显示全部楼层
本帖最后由 gopythoner 于 2017-6-16 17:39 编辑
  1. def unique_in_order(a):
  2.   a = list(a)
  3.   a.append(" ")
  4.   lis = []
  5.   for i in range(len(a)-1):
  6.     if a[i+1]==a[i]:
  7.       pass
  8.     else:
  9.       lis.append(a[i])
  10.   return lis
复制代码


a = 'AAAABBBCCDAABBB'
b = 'ABBCcAD'
c = [1,2,2,3,3]

for k in [a,b,c]:
  print(unique_in_order(k))

输出
['A', 'B', 'C', 'D', 'A', 'B']
['A', 'B', 'C', 'c', 'A', 'D']
[1, 2, 3]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-31 20:29:50 | 显示全部楼层
应该就是去除元素中的连续重复
  1. def unique_in_order(s):
  2.     result = [""]
  3.     [result.append(i) for i in s if i!=result[-1]]
  4.     return result[1:]
复制代码

引出groupby后面题目是什么?这个groupby还有个key参数吧,如果只管第一个参数的话
  1. # 如果groupby只有第一个参数的话
  2. def my_groupby(s):
  3.     key, group = [""],[]
  4.     index = 0
  5.     for i in range(len(s)):
  6.         if s[i] != key[-1]:
  7.             key.append(s[i])
  8.             group.append(s[index:i])
  9.             index = i
  10.     group.append(s[index:])
  11.     return list(zip(key[1:],group[1:]))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-31 20:49:28 | 显示全部楼层
这答案···
原来楼主是说使用groupby,不是重写groupby啊,orz

jerry大神用三元操作符解决空输入,用列表+推导式解决索引的-1,赞
我一直想不到怎么写到一行上

版主那里用错位zip来判断,感觉很巧妙啊,666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 22:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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