python - 在 Python 中返回格式正确的递归列表
问题描述
这是让我头疼的家庭作业,我想知道是否有人可以帮助我了解我哪里出错了。本质上,我有两个字符串,“a”和“b”。如果“a”或“b”为空,我返回另一个字符串,否则,我返回每个字符串中的第一个字符加上每个字符串其余部分的递归调用的并集。因此,这对我来说是递归的尖叫,所以我构建了以下函数。
def myFunction(s, t):
if len(s) == 0:
return([t])
if len(t) == 0:
return([s])
else:
to_add = [[s[0]] + (myFunction(s[1:], t)), ([t[0]] + myFunction(s, t[1:]))]
return(to_add)
当使用输入 s = "ab" 和 t= "cd" 调用函数时打印:
[['a', ['b', 'cd'], ['c', ['b', 'd'], ['d', 'b']]], ['c', ['a', ['b', 'd'], ['d', 'b']], ['d', 'ab']]]
所以据我所知,这不是一个真正的逻辑问题,更多的是我对如何返回我的代码有点傻,因为我期待的答案就在那里,就在一堆列表中的列表。我期待的答案是:
['abcd', 'acbd', 'acdb', 'cabd', 'cadb', 'cdab']
如果有人能指出我在哪里真的很傻/建议更好的方法来做这件事,我会非常感激,因为我开始对此感到非常难过哈哈。
解决方案
您作为预期答案给出的答案看起来更像是字符串的每个可能组合,s
并且按照它们在和中的顺序t
保持字符从s
和t
在结果中的顺序。s
t
要在一个简单的生成器函数中实现这一点:
def combine(s, t):
if not s:
yield t
elif not t:
yield s
else:
for tail in combine(s[1:], t):
yield s[0] + tail
for tail in combine(s, t[1:]):
yield t[0] + tail
print(list(combine('ab', 'cd')))
结果:
['abcd', 'acbd', 'acdb', 'cabd', 'cadb', 'cdab']
推荐阅读
- ios - 禁用 UITableViewCell 子视图上的交互
- javascript - 如何读取在 JavaScript 中作为 Ajax 响应文本接收的数组
- java - spark-submit 找不到类(当类包含在 jar 中时)
- python-3.x - 如何计算排序后有多少元素改变了它在列表中的位置?
- python - Pandas:使用 itertuples 时如何计算滚动指标(均值、标准差、z 分数等)?
- c# - 是否可以在根索引页面中添加 blazor 组件?
- python - 我需要雨量参数是 7 个语句,我怎样才能改变它目前拥有的 8 个特定函数并且仍然让程序工作?
- amazon-web-services - 限制 cognito 用户组的用户访问 API 网关端点
- java - 警告 org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Bootstrap broker 127.0.0.1:9092 (id: -1 rack: null) 已断开连接
- java - 如何将与布尔变量匹配的 int 变量和字符串变量放入 .equals() 中?