вернуть новый список, который чередует два списка, но с изюминкой - PullRequest
0 голосов
/ 20 марта 2020

enter image description here

def back_interleave(first, second):

    if first == [] and second == []:
        return []
    elif first == []:
        return second[::-1]
    elif second == []:
        return first[::-1]
    else: 
        newlist = []
        for i in range(len(first)-1, 0,-1):
            newlist.append(first[i])
            newlist.append(second[i])
        for j in range(len(second)-len(first)-1,0,-1):
            newlist.append(second[i])
    return newlist

Может кто-нибудь сказать мне, что не так с моим кодом на этот вопрос.

Ответы [ 2 ]

1 голос
/ 20 марта 2020

Я не совсем уверен, что не так с вашим кодом, но во втором и третьем if-операторах, по-видимому, используется встроенная функция обращения со списком, которую запрещает исходная проблема.

Что бы я сделал, это определил длина более длинного списка, затем переберите оба списка в обратном порядке.

def back_interleave(first, second):
    newlist = []
    # You want to iterate through the length of the longer list
    length = max(len(first), len(second))
    for x in range(length):
        # start appending elements from the back of the list
        index = -1*(x+1)
        if x < len(first):
            newlist.append(first[index])
        if x < len(second):
            newlist.append(second[index])
    return newlist
0 голосов
/ 20 марта 2020

Проблема в вашем коде заключается в том, что когда вы используете функцию диапазона, значение остановки является исключительным, т. Е. Индекс 0 становится исключительным в вашем случае. А также в jl oop значения по индексу i сохраняются вместо значений по индексу j.

@ CyanideTesla предоставил код, который довольно хорошо работает для вашей проблемы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...