Python: найдите каждую последовательность Фибоначчи в заданном списке чисел

#python #list #search #find #fibonacci

#python #Список #Поиск #Найти #фибоначчи

Вопрос:

программа, которая принимает от пользователя список чисел, разделенных знаком «,», извлекает и печатает каждую последовательность фибоначчи из списка. вот так:

 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 = []
  

«результат» — это выходной список (или списки).
я надеюсь, что мои объяснения были понятны. кто-нибудь может помочь?

Комментарии:

1. Ваш ожидаемый результат не очень понятен для данного ввода. Когда вы говорите every fibonacci sequence , что именно вы имеете в виду под этим? Например, согласно вашему тексту [0] также будет действительный ряд Фибоначчи, но он не включен в ваш ожидаемый результат

2. Почему программа не должна выводить [0] или [0,1] , [0,1,1] или [0,1,1,2] ?

Ответ №1:

Приведенная ниже программа должна работать, она проверит наличие ряда фибоначчи в списке чисел

 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)
  

Ответ №2:

Идея очень похожа на @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]]
  

Ответ №3:

 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, чтобы проверить соединение массива на соответствие и вернуть количество найденных записей. Используя ответ из checkSequence, вы затем можете создать соединение для вашего списка ответов. Это приводит к результатам, которые вы указали в своем вопросе.

РЕДАКТИРОВАТЬ: Вам нужно будет определить последовательность Фибоначчи раньше. Вы можете либо использовать статическую последовательность, как я, либо вычислять до определенной точки, а затем сравнивать с этим результатом.

Комментарии:

1. @mad_ где это не дает прямого ответа на вопрос?