gpt4 book ai didi

python - "pre-checking"是避免在列表上进行双重递归时添加无类型或空字符串的首选方法吗?

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:09 24 4
gpt4 key购买 nike

我在 python3 中对列表进行一些递归练习,遇到了一个问题,我会在返回的列表中填充一些不需要的 None 类型。

这个特定的练习是为了创建一个从列表中删除所有元音字符串的函数。输入列表中的所有元素都是长度为 1 的字符串,但该列表也可以包含更多列表。

def without_vowels(arg):
vowels = "aeiuoåäöAEIUOÅÄÖ"

if not arg:
return arg

elif isinstance(arg, str):
if not arg in vowels:
return arg
else:
return ""

elif isinstance(arg, list):
if without_vowels(arg[0]) == "":
return without_vowels(arg[1:])
else:
return [without_vowels(arg[0])] + without_vowels(arg[1:])

预期输出:

>>> test = ["a", ["h", "e", "j"], ["t", "e", "s", "c", "o"]]
>>> without_vowels(test)
>>> [['h', 'j'], ['t', 's', 'c']]

最初,为了“删除”检测到的元音,我不会返回任何内容。这导致 None-types 被添加到列表中。

没有解决方法的输出(第 10、11、14-16 行已删除):

>>> without_vowels(test)
>>> [None, ['h', None, 'j'], ['t', None, 's', 'c', None]]

为了解决这个问题,我更改了代码以在找到元音时返回空字符串,并在再次调用该函数以继续之前添加了“预检查”,基本上只是检查函数调用是否会找到元音(并返回“”),在这种情况下,跳到列表参数的下一部分。

我觉得我遗漏了一些明显的东西,应该有一个更好的解决方案而不使用像这样的变通方法。

谢谢

编辑:这个特定的练习旨在用双递归来解决,而不是用迭代和单递归的组合来解决

最佳答案

This particular exercise is meant to be solved with double recursion, not with a combination of iteration and single recursion

我的递归方法是保持简单,让递归为您完成工作:

VOWELS = set("aeiuoåäöAEIUOÅÄÖ")

def without_vowels(argument):

if not argument:
return argument

head, *tail = argument

if isinstance(head, list):
head = without_vowels(head)
elif head in VOWELS:
return without_vowels(tail)

return [head, *without_vowels(tail)]

用法

>>> test = ["a", ["h", "e", "j"], ["t", "e", "s", "c", "o"]]
>>> without_vowels(test)
[['h', 'j'], ['t', 's', 'c']]
>>>

关于python - "pre-checking"是避免在列表上进行双重递归时添加无类型或空字符串的首选方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54816941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com