如何在Python中使用循环反转列表的一部分?

时间:2016-05-26 12:47:29

标签: python list function loops reverse

我需要一点帮助,使用循环来反转Python 中列表的一部分。

我有一个列表:mylist = ['a', 'b', 'c', 'd', 'e', 'f']

还有一个索引号,这个号码会告诉你哪里开始倒车。例如,如果反向索引号为3,则需要如下所示:['d', 'c', 'b', 'a', 'e', 'f']

我现在有什么:

def list_section_reverse(list1, reverse_index):
    print("In function reverse()")

    n_list = []

    for item in range( len(list1) ):
        n_list.append( (list1[(reverse_index - 1) - item]) )
        item += 1
    return n_list

mylist = ['a', 'b', 'c', 'd', 'e', 'f']
print( list_section_reverse(mylist, 3) )

返回['c', 'b', 'a', 'f', 'e', 'd']

如何更改代码,以便打印出['d', 'c', 'b', 'a', 'e', 'f']

5 个答案:

答案 0 :(得分:2)

您可以简单地使用:

def list_section_reverse(list1, reverse_index):
    return list(reversed(list1[:reverse_index+1])) + list1[reverse_index+1:]

修改:现有解决方案的问题在于reverse_index之后你会继续倒车。如果您必须使用循环,请尝试以下操作:

def list_section_reverse(list1, reverse_index):
    print("In function reverse()")

    n_list = list1[:]

    for i in range(reverse_index + 1):
        n_list[i] = list1[-i-reverse_index]
    return n_list

mylist = ['a', 'b', 'c', 'd', 'e', 'f']
print(list_section_reverse(mylist, 3))

答案 1 :(得分:2)

pythonic解决方案:

list1[reverse_index::-1] + list1[reverse_index+1:]

现在,这不是像你问的那样使用循环。好吧,没有明确......相反,我们可以将上述内容分解为循环的组成部分。

def list_section_reverse(list1, reverse_index):
    if reverse_index < 0 or reversed_index >= len(list1):
        raise ValueError("reverse index out of range")
    reversed_part = []
    for i in range(reverse_index, -1, -1): # like for i in [n, n-1, ..., 1, 0]
        reversed_part.append(list1[i]

    normal_part = []
    for i in range(reverse_index + 1, len(list1)):
        normal_part.append(list1[i])

    return reversed_part + normal_part

答案 2 :(得分:0)

你可以试试这个。这不使用切片,可以使用while循环或for循环。

    def reversed_list(my_list, index):
        result = []
        list_copy = my_list.copy()

        i = 0
        while i < index+1:
            result.append(my_list[i])
            list_copy.remove(my_list[i])
            i+=1

        result.reverse()

        return result + list_copy

或使用for循环

    def reversed_list(my_list, index):
        result = []
        list_copy = my_list.copy()

        for i in range(len(my_list)):
            if i < index + 1:
                result.append(my_list[i])
                list_copy.remove(my_list[i])

        result.reverse()

        return result + list_copy

答案 3 :(得分:0)

是否允许复制清单?

def list_section_reverse(list1, reverse_index):
    print("In function reverse()")

    n_list = [ element for element in list1 ]

    for item in range( reverse_index + 1 ):
        n_list[ item ] = list1[ reverse_index - item ]
        item += 1

    return n_list

mylist = ['a', 'b', 'c', 'd', 'e', 'f']
print(list_section_reverse(mylist, 3))

前前后后:

In function reverse()
['d', 'c', 'b', 'a', 'e', 'f']

答案 4 :(得分:0)

您可以使用切片在原地修改列表。

mylist[:4] = mylist[:4][::-1]