Python中如何实现斐波那契序列的去重选择性文件存储?
解决斐波那契序列重复保存问题
问题原因
你的代码中,当i=0、i=1、i=2时,fibonacci(i)返回的都是[0,1]——因为函数初始就创建了长度为2的序列,当len(sequence) >= n时会直接返回该序列,所以这三次循环生成的序列完全重复,导致文件中多次出现[0,1]。
解决方案一:用集合记录已保存序列
通过一个集合存储已经写入文件的序列字符串,每次生成序列后先检查是否已存在,仅保存未出现过的序列:
def fibonacci(n): sequence = [0, 1] while len(sequence) < n: next_number = sequence[-1] + sequence[-2] sequence.append(next_number) return sequence n = 10 saved_sequences = set() # 记录已保存的序列字符串 for i in range(0, n): result = fibonacci(i) seq_str = str(result) if seq_str not in saved_sequences: # 仅当序列未保存过时才写入文件 with open("Fibonacci.txt", 'a') as f: f.write('\n' + seq_str) saved_sequences.add(seq_str) print(result)
解决方案二:调整循环范围
由于i<2时生成的都是重复的[0,1],可以手动先写入一次该序列,再从i=3开始循环生成后续不同长度的序列:
def fibonacci(n): sequence = [0, 1] while len(sequence) < n: next_number = sequence[-1] + sequence[-2] sequence.append(next_number) return sequence n = 10 # 先写入唯一的[0,1],用'w'模式清空文件避免残留内容 with open("Fibonacci.txt", 'w') as f: f.write(str([0,1])) # 从i=3开始,生成长度3到10的序列 for i in range(3, n+1): result = fibonacci(i) with open("Fibonacci.txt", 'a') as f: f.write('\n' + str(result)) print(result)
两种方案都能得到你期望的无重复序列文件,第一种更通用(比如后续函数逻辑修改后仍能避免重复),第二种更直接高效。
内容的提问来源于stack exchange,提问作者KeplerNick123
相关产品推荐
相关产品推荐

