鱼C论坛

 找回密码
 立即注册
查看: 5080|回复: 24

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

[复制链接]
发表于 2017-6-7 19:30:25 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 ooxx7788 于 2017-6-8 15:19 编辑

虽然我知道这样算是偷懒,但是我确实就是懒啊!(唉,最近我已经区分不出什么是简单,什么是难了,再发一个吧!)

依然不是不太难的题目,不过这种排序排序不就是最常见的题目嘛!可以自己拓展一下,变成一个长字符串,让你快速解决。看看你行不行呢?或者说,不要用循环,你能解决吗?

QQ图片20170607192622.png

游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-6-8 14:34:26 | 显示全部楼层
  1. from collections import Counter

  2. def findalpha(str1):
  3.     c = Counter(str1)
  4.     print ''.join([k for k, v in c.items()])

  5. str1 = raw_input('请输入一个只包含字母的字符串:')

  6. findalpha(str1)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-8 15:35:27 | 显示全部楼层
  1. def reprint(s):
  2.     ss = ''
  3.     for i in range(len(s)):
  4.         if s[i] not in ss:
  5.             ss += s[i]
  6.     return ss
  7. print(reprint('abcqweracb'))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-8 15:52:05 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-8 16:00:51 | 显示全部楼层

化学只停留在初中水平,从高中就没碰过化学,公式啥的基本上都看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-8 16:07:20 | 显示全部楼层

正好看到一道题目,提供给你作为练习题:
话说有一套砝码,重量w1,w2 ... wn组成的列表w,对应的数量为n1, n2 ... nn组成的列表n
问题1:现在如果告诉你一个总质量weight
你能否用这套砝码称出来?
问题2:如果这套砝码的重量列表仍为w,但是每个砝码对应的数量为无限
现在如果告诉你一个总质量weight,你能否用这套砝码称出来?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-8 16:13:32 | 显示全部楼层
jerryxjr1220 发表于 2017-6-8 16:07
正好看到一道题目,提供给你作为练习题:
话说有一套砝码,重量w1,w2 ... wn组成的列表w,对应的数量为 ...

难道没有使用砝码数量最少的这种限制?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-8 16:40:27 | 显示全部楼层
ooxx7788 发表于 2017-6-8 16:13
难道没有使用砝码数量最少的这种限制?

没有,只要可以称出来,就输出所有可能的组合,如果不能就输出NONE
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-8 20:47:46 | 显示全部楼层
看看了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-9 21:43:55 | 显示全部楼层
字符串本身就是 序列,这样写更简洁
  1. >>> s='abcqweracb'
  2. >>> foobar = lambda s:''.join(sorted(set(s),key=s.index))
  3. >>> foobar(s)
  4. 'abcqwer'
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-9 23:06:25 | 显示全部楼层
据说新版的python的字典是有序的。
  1. >>> string = 'abcqweracb'
  2. >>> d ={}
  3. >>> ''.join(d.fromkeys(string))
  4. 'abcqwer'
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-9 23:24:55 | 显示全部楼层
冬雪雪冬 发表于 2017-6-9 23:06
据说新版的python的字典是有序的。
  1. ''.join(set(s))
复制代码


直接这样应该也可以

3.6 的哈希方法保持了key插入的顺序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-9 23:27:47 | 显示全部楼层
SixPy 发表于 2017-6-9 23:24
直接这样应该也可以

3.6 的哈希方法保持了key插入的顺序

我也想用集合的,但好像不行,python3.6.1
  1. >>> string = 'abcqweracb'
  2. >>> ''.join(set(string))
  3. 'aebcwqr'
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-9 23:44:46 | 显示全部楼层
冬雪雪冬 发表于 2017-6-9 23:27
我也想用集合的,但好像不行,python3.6.1

直接这样就行,不用空字典
  1. ''.join(dict.fromkeys(s))
复制代码


不过,依赖python版本内部特性的方式不够通用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-9 23:46:59 | 显示全部楼层
SixPy 发表于 2017-6-9 23:44
直接这样就行,不用空字典

是的,但新版python加入了这个特性,以后有可能成为其通用特性。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-9 20:03:33 | 显示全部楼层
这个问题我都不知道怎么写。。。。。尴尬额
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-22 19:10:53 | 显示全部楼层
  1. def func(s):
  2.     out = ""
  3.     for i in s:
  4.         if i not in out:
  5.             out += i
  6.     return out
复制代码

把循环范围缩减一下不知道有没有用
  1. def func2(s):
  2.     out = [""]*len(s)
  3.     for i in set(s):
  4.         out[s.find(i)] = i
  5.     return "".join(out)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-6 14:17:30 | 显示全部楼层
  1. def func(string):
  2.     s = []
  3.     for index in range(-1, -len(string), -1):
  4.         if string[index] not in string[:len(string)+index]:
  5.             s.append(string[index])
  6.     s.append(string[0])
  7.     return ''.join(s[::-1])

  8. print(func('abcqweracb'))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-2 17:40:22 | 显示全部楼层
  1. import random

  2. string = ''
  3. # 生成随机字符串
  4. for i in range(1, random.randint(10, 101)):
  5.     integer = random.randint(65, 122)
  6.     if not (integer in range(91, 97)):
  7.         string += chr(integer)

  8. print("\n{0:10}生成的字符串:{1}".format(' ', string))
  9. print("上面字符串包含的字符集合:{0}".format(''.join(sorted(set(string),key=string.index))))
复制代码

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

使用道具 举报

发表于 2019-1-12 10:28:08 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-18 20:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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