鱼C论坛

 找回密码
 立即注册
查看: 977|回复: 2

请各位大佬看看我的代码有没有错

[复制链接]
发表于 2020-7-9 15:46:59 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 lhgzbxhz 于 2020-7-9 16:11 编辑

有一个奇技淫巧让我费尽心思:https://fishc.com.cn/thread-143989-1-1.html
解决之后还在想这怎么只是二级?
一看答案:好吧,彻底无语(为了不透露答案这里就不细说了)
然后我还是觉得我的代码有问题(虽然运行结果是正确的),因此发上来给各位大佬看看到底有没有问题,如果有该如何改正
f = lambda chs, sz: print(sz) if chs == '' else [f(chs.replace(c, ''), sz + c) for c in chs]
f("FishC", '')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-9 16:30:56 | 显示全部楼层


测试下个数对不对即可,如果个数对了,其他正常情况也没差了~:
a = []
f = lambda chs, sz: a.append(sz) if chs == '' else [f(chs.replace(c, ''), sz + c) for c in chs]
f("FishC", '')
print(len(a))
# ——————下面是甲鱼哥的代码——————————————
import itertools
print(len(list(''.join(i) for i in itertools.permutations('FishC'))))

返回结果:
120
120

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

使用道具 举报

 楼主| 发表于 2020-7-9 16:53:19 | 显示全部楼层
Twilight6 发表于 2020-7-9 16:30
测试下个数对不对即可,如果个数对了,其他正常情况也没差了~:

嗯嗯,不过还有什么优化的余地么(不适用itertools的情况下),毕竟在列表推导式中进行递归感觉不大优雅(不过为了在2行内解决问题只能这么干)
这是没用lambda表达式的情况
def f(chs, sz):
    if chs == '':
        print(sz)
    for c in chs:
        f(chs.replace(c, ''), sz + c)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 01:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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