如何在列表中就地反转一个子列表?
我需要写一个函数,这个函数的输入是一个列表和两个数字。这个函数的作用是反转由这两个数字指定位置的子列表。
举个例子,这个函数应该这样工作:
>>> 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