如何在列表中就地反转一个子列表?

20 投票
14 回答
23363 浏览
提问于 2025-04-17 21:20

我需要写一个函数,这个函数的输入是一个列表和两个数字。这个函数的作用是反转由这两个数字指定位置的子列表。
举个例子,这个函数应该这样工作:

>>> lst = [1, 2, 3, 4, 5] 
>>> reverse_sublist (lst,0,4) 
>>> lst  [4, 3, 2, 1, 5]

我写了一个函数,它能正常工作,但我不确定它是否是就地操作。以下是我的代码:

def reverse_sublist(lst,start,end):
    sublist=lst[start:end]
    sublist.reverse()
    lst[start:end]=sublist
    print(lst)

14 个回答

0

lst[::-1] 是在Python中反转列表的常用写法。下面的内容展示了它是如何工作的,并且说明它是在原地进行的:

>>> lst = [1, 2, 3, 4, 5]
>>> id(lst)
12229328
>>> lst[:] = lst[::-1]
>>> lst
[5, 4, 3, 2, 1]
>>> id(lst)
12229328
2

我不确定你是否遇到过和我一样的问题,但我需要在原地反转一个列表。

我唯一缺少的就是 [:]

exStr = "String"

def change(var):
  var[:] = var[::-1] # This line here

print(exStr) #"String"
change(exStr)
print(exStr) #"gnirtS"
2

最简单的方法来反转一个列表,可以是部分反转或者完全反转。

listVar = ['a','b','c','d']
def listReverse(list,start,end):
    while(start<end):
        temp = list[start]
        list[start] = list[end] #Swaping
        list[end]=temp
        start+=1
        end-=1
    print(list)


listReverse(listVar,1,3)

输出结果:- ['a', 'd', 'c', 'b']

2

部分反转,不使用临时列表(如果你用的是Python 2,把range换成xrange):

def partial_reverse(list_, from_, to):
    for i in range(0, int((to - from_)/2)):
        (list_[from_+i], list_[to-i]) = (list_[to-i], list_[from_+i])

list_ = [1, 2, 3, 4, 5, 6, 7, 8]
partial_reverse(list_, 3, 7)
print(list_)
30

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。这就像给程序设定了一些规则,只有当这些规则被满足时,程序才会按照我们的要求去做事情。

比如说,如果你想让程序在用户输入一个数字时,检查这个数字是否大于10。如果大于10,程序就会显示“这个数字很大”;如果小于或等于10,程序就会显示“这个数字不大”。这样,程序就能根据用户的输入做出不同的反应。

这种根据条件来决定程序行为的方式,我们通常称之为“条件语句”。它是编程中非常重要的一部分,因为它让程序变得更加智能和灵活。

在实际编程中,条件语句的写法可能会有点复杂,但基本的思路就是:先判断条件是否成立,然后根据判断的结果来执行不同的代码。

希望这个解释能帮助你理解条件语句的基本概念!

def reverse_sublist(lst,start,end):
    lst[start:end] = lst[start:end][::-1]
    return lst

撰写回答