【问题标题】:Find all substrings of a given string recursively in python在python中递归查找给定字符串的所有子字符串
【发布时间】:2019-03-29 22:30:28
【问题描述】:

给定字符串“lion”应该得到以下子字符串的输出, ["离子", "lin", "in", "io", "li", "on", "lion"]

这是我目前所拥有的,

def Substring(n):
   sub = [n]
   if len(n) > 2:
       sub.extend(Substring(n[1:]))
       sub.extend(Substring(n[:-1]))
   return list(sub)

我当前的输出是['lion', 'ion', 'on', 'io', 'lio', 'io', 'li']

我缺少子字符串“lin”和“in”,我不应该有“lio”。

如果我需要不同的方法或需要额外的语句,我无法弄清楚?

【问题讨论】:

  • 为什么lio 无效?
  • 为什么输出中没有“lon”?那么“lo”和“ln”呢?
  • lion 没有子字符串 lin 或 in 或 lon。它不是一个子字符串,它是一个组合
  • 我写了一个答案,假设这只是“所有可能的子字符串”而没有仔细阅读......你的任务是弄清楚实际算法是什么,或者你只是没有给我们全文的任务?
  • 任务是编写一个接受字符串参数并返回子字符串的函数。 “lo”没有被计算在内,因为没有从 lion 到 lo 的子词路径。

标签: python string function recursion substring


【解决方案1】:

有一个不需要itertools 的单行代码。根据您的习惯,它可能或多或少清晰易读。

tuple(s[i:i+j+1] for i in range(len(s)) for j in range(len(s)-i))
# ('l', 'li', 'lio', 'lion', 'i', 'io', 'ion', 'o', 'on', 'n')

请注意,tuple 演员表仅用于打印;没有它,Python 会给你一个生成器,如果你在它上面迭代,它会更有效。

对于长度为 2 或更大的子字符串:

tuple(s[i:i+j+1] for i in range(len(s)) for j in range(1, len(s)-i))
# ('li', 'lio', 'lion', 'io', 'ion', 'on')

【讨论】:

    猜你喜欢
    • 2012-10-23
    • 2012-04-20
    • 2014-02-19
    • 2017-05-26
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 2016-10-02
    • 2015-12-31
    相关资源
    最近更新 更多