在Python中使用递归将元素及其类型写入文本文件

2024-04-18 18:12:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python很陌生,所以请容忍我。我目前正在尝试使用递归创建一个函数,它将遍历一个列表,对于每个整数项,它将写入一个文本文件I(表示整数)+值。到目前为止,我的情况是: 非常感谢您的帮助!你知道吗

def save(file, value):
    output = ''
    if len(value) == 0:
        pass
    else:
        element = value[0]
        if type(element) == int:
            output += 'I' + element
            save(f, element+1)
        else:
            pass
    print(output)

a = ['this', 'is', 'a', 'list', 1, 2, 3, 4]


with open('forlater.txt', mode='w') as f:
    save(f, a)

Tags: 函数列表outputifvaluesavedef情况
3条回答

这样做不需要递归,只需遍历列表并为每个元素编写所需内容。将函数的第一个if else块替换为:

for element in value:
    if type(element) == int:
        output = 'I' + str(element)
        f.write(output)

你也可以使用列表理解

[f.write('I' + str(element) for element in value if type(element) == int] 

如果要使用递归:

def my_homework(list, file):
    if len(list) > 1:
        my_homework(list[1:], file)
    if isinstance(list[0], int):
        print("I" + str(list[0]), file=file)

但这不能维持你的秩序。你知道吗

在递归调用中传递参数的方式似乎有几个问题。第一个问题是,在递归调用中,您将整数作为value传递,但是value意味着是一个列表(更好的命名方式会有所帮助)。第二个是output不会在递归调用中传递,也不会返回。你知道吗

另一个问题是,如果element的类型不是int,则不会再次调用save,因此当前save只会被调用一次,因为a的第一个元素是字符串。你知道吗

记住这些,下面是代码的重构:

def save(file, values, output=''):
    if len(values) == 0:
        f.write(output)
    else:
        element = values[0]
        if type(element) == int:
            output += 'I' + str(element)

        #outside `if` block
        remaining_values = values[1:]
        save(f, remaining_values, output=output)


a = ['this', 'is', 'a', 'list', 1, 2, 3, 4]

with open('forlater.txt', mode='w') as f:
    save(f, a)

将以下内容写入文件:

I1I2I3I4

您可能需要包含一些间距或新行。你知道吗

还要考虑到这个问题实际上不需要使用递归,for循环将是完成任务的更简单的方法:

def save(file, values):
    output = ''
    for element in values:
        if type(element) == int:
            output += 'I' + str(element)

    f.write(output)

相关问题 更多 >