python - 查找所有字符串拆分组合

标签 python arrays string recursion

我正在寻找一种从句子中获取所有字符串拆分组合的方法。 例如,对于输入语句:

"I am eating pizza"

我想得到这个输出:

[["I", "am", "eating", "pizza"],
["I", "am eating", "pizza"],
["I", "am", "eating pizza"],
["I", "am eating pizza"],
["I am", "eating", "pizza"],
["I am", "eating pizza"],
["I am eating", "pizza"],
["I am eating pizza"]]

我找不到执行此操作的递归方法!你有什么主意吗 ? 这不是重复的:我不是在寻找整个组合,只是在寻找有序的项目,而且总是在寻找整个单词。无法从所谓的重复项中找到我的答案。

最佳答案

分割和重现

这里有一种使用递归函数的方法——以及我是如何进行设计的:

  • 使用索引 i 扫描字符串 s
  • 如果索引越界,返回基础结果,[[s]],否则...
  • 如果在索引处找到"",将问题分割为AB两部分并合并它们的结果,否则前进到下一个索引。
  • A 部分:在此空间上拆分,在递归结果中的每个项目之前添加单词。
  • B 部分:在此空间上拆分,前进到下一个索引
# split :: String -> [[String]]
def split (s, i = 0):
  if len(s) == i:
    return [[s]]
  elif s[i] == " ":
           # Part A                                     # Part B
    return [[s[0:i]] + acc for acc in split(s[i + 1:])] + split(s, i + 1)
  else:
    return split(s, i + 1)

print(split("i am eating pizza"))

# [ ['i', 'am', 'eating', 'pizza'], 
# , ['i', 'am', 'eating pizza']
# , ['i', 'am eating', 'pizza']
# , ['i', 'am eating pizza']
# , ['i am', 'eating', 'pizza']
# , ['i am', 'eating pizza']
# , ['i am eating', 'pizza']
# , ['i am eating pizza']
# ]

关于python - 查找所有字符串拆分组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47907585/

相关文章:

c - 将多维数组写入文本文件

c - 使用替换密码的加密不会生成有效的 ASCII 输出

python - 将字符串转换为 int 或 inverse 更有效?

string - 查找字符串中子字符串的索引,指定起始索引

python - kdtree 是否用于加速 k-means 聚类?

python - 单词的引用列表位置

java - 在 Java 中使用递归清除一维数组?

Python Twisted 从 TCP 接收命令写入串行设备返回响应

python - 两个子图上的两个颜色条,相同的图形

c - 更新终端上显示的文本