鱼C论坛

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

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

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

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

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

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

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

其实出这个题我主要是想引入这个东西:
>>> for key, group in itertools.groupby('AAABBBCCAAA'):
...     print(key, list(group))
...
A ['A', 'A', 'A']
B ['B', 'B', 'B']
C ['C', 'C']
A ['A', 'A', 'A']

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

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-6-14 11:19:16 | 显示全部楼层
本帖最后由 jerryxjr1220 于 2017-6-14 11:22 编辑
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 | 显示全部楼层
str = input('please enter a string:')

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

print (groupby)
please enter a string:AbsCd123S
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 | 显示全部楼层
>>> ss='AAAABBBCCDAABBB'
>>> [a for a,b in zip(ss,ss[1:]+'\0')if a!=b]
['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 编辑
def unique_in_order(a):
  a = list(a)
  a.append(" ")
  lis = []
  for i in range(len(a)-1):
    if a[i+1]==a[i]:
      pass
    else:
      lis.append(a[i])
  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 | 显示全部楼层
应该就是去除元素中的连续重复
def unique_in_order(s):
    result = [""]
    [result.append(i) for i in s if i!=result[-1]]
    return result[1:] 
引出groupby后面题目是什么?这个groupby还有个key参数吧,如果只管第一个参数的话
# 如果groupby只有第一个参数的话
def my_groupby(s):
    key, group = [""],[]
    index = 0
    for i in range(len(s)):
        if s[i] != key[-1]:
            key.append(s[i])
            group.append(s[index:i])
            index = i
    group.append(s[index:])
    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, 2025-1-15 06:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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