Python:找到给定数字列表中的每个斐波那契数列
Python: Find Every Fibonacci Sequence in a Given List of Numbers
一个程序,它从用户那里获取一个用“,”分隔的数字列表,然后从列表中提取并打印每个斐波那契数列。
像这样:
In: 5,6,9,3,0,1,1,2,3,8,2,9,3,0,1,1,2,3,5,98
Out:
[0,1,1,2,3]
[0,1,1,2,3,5]
我尝试使用 "for" 循环来找到第一个 0 并处理它之后的程序。就像它检查并遵循斐波那契序列的列表,直到它超出序列,打印列表,然后寻找下一个 0。
我写了获取输入的部分代码,但我不知道如何做其余的
numbers = input("Enter your numbers list and use comma to seperate them: ")
numlist = numbers.split(",")
numlist = [int(x) for x in numlist]
result = []
"result" 是输出列表(或列表)。
我希望我的解释很清楚。有人可以帮忙吗?
下面的程序应该可以运行,它将检查数字列表中的斐波那契数列
numbers = [5,6,9,3,0,1,1,2,3,8,2,9,3,0,1,1,2,3,5,98]
first = numbers[0]
second = numbers[1]
fibbonacci = []
result = []
for number in numbers[2:]:
if first + second == number:
if not fibbonacci:
fibbonacci.extend([first, second, number])
else:
fibbonacci.append(number)
elif fibbonacci:
result.append(fibbonacci)
fibbonacci = []
first = second
second = number
print(result)
FIB = [0,1,1,2,3,5,8,13]
def checkSequence(numArr):
i = 0
while i < len(numArr):
if FIB[i] == int(numArr[i]):
i += 1
else:
return i
numbers = input("Enter your numbers list and use comma to seperate them: ")
numlist = numbers.split(",")
answer = list()
i = 0
while i < len(numlist):
if int(numlist[i]) == 0:
ret = checkSequence(numlist[i:])
answer.append(numlist[i:i+ret])
i += 1
如您所见,您可以很容易地创建一个 CheckSquence 方法来检查数组拼接的顺序和 return 您找到的条目数量。使用来自 checkSequence 的答案,您可以为您的答案列表创建拼接。这会产生您在问题中指定的结果。
编辑:您需要先定义斐波那契数列。您可以像我一样使用静态序列,或者计算到某个点,然后与该结果进行比较。
想法与@Vuplex 非常相似,但可以使用os.path.commonprefix删除额外的代码来比较两个系列
import os
numlist = list(map(int,input.split(',')))
answer = []
fib_series = [0,1,1,2,3,5,8,13]
answer = []
i = 0
while i < len(numlist):
if not numlist[i]:
answer.append(os.path.commonprefix([fib_series,numlist[i:]]))
i += 1
print(answer) #[[0, 1, 1, 2, 3], [0, 1, 1, 2, 3, 5]]
一个程序,它从用户那里获取一个用“,”分隔的数字列表,然后从列表中提取并打印每个斐波那契数列。 像这样:
In: 5,6,9,3,0,1,1,2,3,8,2,9,3,0,1,1,2,3,5,98
Out:
[0,1,1,2,3]
[0,1,1,2,3,5]
我尝试使用 "for" 循环来找到第一个 0 并处理它之后的程序。就像它检查并遵循斐波那契序列的列表,直到它超出序列,打印列表,然后寻找下一个 0。 我写了获取输入的部分代码,但我不知道如何做其余的
numbers = input("Enter your numbers list and use comma to seperate them: ")
numlist = numbers.split(",")
numlist = [int(x) for x in numlist]
result = []
"result" 是输出列表(或列表)。 我希望我的解释很清楚。有人可以帮忙吗?
下面的程序应该可以运行,它将检查数字列表中的斐波那契数列
numbers = [5,6,9,3,0,1,1,2,3,8,2,9,3,0,1,1,2,3,5,98]
first = numbers[0]
second = numbers[1]
fibbonacci = []
result = []
for number in numbers[2:]:
if first + second == number:
if not fibbonacci:
fibbonacci.extend([first, second, number])
else:
fibbonacci.append(number)
elif fibbonacci:
result.append(fibbonacci)
fibbonacci = []
first = second
second = number
print(result)
FIB = [0,1,1,2,3,5,8,13]
def checkSequence(numArr):
i = 0
while i < len(numArr):
if FIB[i] == int(numArr[i]):
i += 1
else:
return i
numbers = input("Enter your numbers list and use comma to seperate them: ")
numlist = numbers.split(",")
answer = list()
i = 0
while i < len(numlist):
if int(numlist[i]) == 0:
ret = checkSequence(numlist[i:])
answer.append(numlist[i:i+ret])
i += 1
如您所见,您可以很容易地创建一个 CheckSquence 方法来检查数组拼接的顺序和 return 您找到的条目数量。使用来自 checkSequence 的答案,您可以为您的答案列表创建拼接。这会产生您在问题中指定的结果。
编辑:您需要先定义斐波那契数列。您可以像我一样使用静态序列,或者计算到某个点,然后与该结果进行比较。
想法与@Vuplex 非常相似,但可以使用os.path.commonprefix删除额外的代码来比较两个系列
import os
numlist = list(map(int,input.split(',')))
answer = []
fib_series = [0,1,1,2,3,5,8,13]
answer = []
i = 0
while i < len(numlist):
if not numlist[i]:
answer.append(os.path.commonprefix([fib_series,numlist[i:]]))
i += 1
print(answer) #[[0, 1, 1, 2, 3], [0, 1, 1, 2, 3, 5]]