首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HackerRank itertools.combinations()

HackerRank itertools.combinations()
EN

Code Review用户
提问于 2020-11-28 14:57:07
回答 1查看 561关注 0票数 3

我在HackerRank上解决了下面的HackerRank问题。

这是我的解决办法-

代码语言:javascript
复制
from itertools import combinations
a = input()
ls = list(map(str, a.split()))
for i in range(1, int(ls[1])+1):
    ls2 = []
    ls2 = list(map("".join, combinations(ls[0], i)))
    for elem in ls2:
        ls2[ls2.index(elem)] = "".join(sorted(elem))
    ls2.sort()
    for char in ls2:
        print(char)

但是我觉得它不是很有效,因为它使用了2个列表和2个嵌套循环。

对于如何改进代码,有什么建议吗?

EN

回答 1

Code Review用户

回答已采纳

发布于 2020-11-28 16:06:40

很好的解决方案,以下是我的建议:

  • Parsing输入:在Python3中,函数input总是返回一个字符串,因此可以删除映射。在Python2中,您可以使用raw_input
  • 命名ls太通用了。在这种情况下,建议将问题描述中的名称取出来。出发地:a=str() ls = list(map(str,a.split()到: S,k=str().split()
  • Sort预先:问题需要以字典排序顺序输出组合。文档说:

组合元组按照输入可迭代的顺序以字典顺序发出。因此,如果输入可迭代排序,组合元组将按排序顺序产生。

因此,不是对每个组合进行排序,而是在开始时对输入S进行足够的排序,所有组合都将自动排序。

  • Use itertools.combinations的输出:itertools.combinations的输出是一个可迭代的或多个元组,可以在for-循环中逐个打印组合。唯一的改变是将元组转换为字符串,并且可以用string.join完成。

修改代码

代码语言:javascript
复制
from itertools import combinations

S, k = input().split()
S_sorted = ''.join(sorted(S))
for i in range(1, int(k)+1):
    for c in combinations(S_sorted, i):
        print(''.join(c))
票数 4
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/252786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档