Python 如何在不使用reverse()和return的情况下反转列表
我需要一个代码,不使用reverse()的两个返回来反转列表。因此它只能修改输入的列表。以下是我迄今为止尝试过但尚未奏效的方法:Python 如何在不使用reverse()和return的情况下反转列表,python,python-3.x,list,Python,Python 3.x,List,我需要一个代码,不使用reverse()的两个返回来反转列表。因此它只能修改输入的列表。以下是我迄今为止尝试过但尚未奏效的方法: def reversed(x): x[::-1] 及 第二个代码给了我一个错误“name”x“未定义”您可以将x指定给它的反向值: x = x[::-1] 这与第一个示例相同,尽管它重新分配了变量 def reverse_list(x): return x[::-1] x =[1,2,3,4,5] y = reverse_list(x) p
def reversed(x):
x[::-1]
及
第二个代码给了我一个错误“name”x“未定义”您可以将x指定给它的反向值:
x = x[::-1]
这与第一个示例相同,尽管它重新分配了变量
def reverse_list(x):
return x[::-1]
x =[1,2,3,4,5]
y = reverse_list(x)
print(y)
输出:[5,4,3,2,1]首先,不要这样做。变异的数据结构会让你的同事讨厌你。但如果必须这样做,请考虑:
def mutate(lst):
backward = lst[::-1]
lst.clear()
lst.extend(backward)
a = [1,2,3,4]
print(a)
print(id(a))
mutate(a)
print(a)
print(id(a))
mutate
函数对其输入进行反向复制。然后清除传入的列表的内容,使其为空。最后,它用反向副本填充空列表。通过这种方式,原始对象在适当的位置发生变化并保留其原始ID
或者,如果您的资源非常有限,并且为了不必临时复制输入列表,您愿意让代码变慢,那么您可以交换第一个和最后一个项目,然后将第二个和第二个项目交换为lsat项目,依此类推,直到您到达列表的中间:
def mutate_by_swapping(lst):
last_index = len(lst) - 1
for i in range(len(lst) // 2):
lst[i], lst[last_index - i] = lst[last_index - i], lst[i]
注意第二个函数的缩进需要代码吗?你是说函数吗?还是一份声明?你的意思是不能使用内置的
reversed
函数或return
语句吗?你想要像[x[-(i+1)]这样的列表表达式来表示范围内的i(len(x))]你可能想要在reverse(x)
函数中运行for
循环。因此,您需要适当缩进for
循环。这是作业吗?似乎只有极少数几个地方需要设置这样的约束条件,您必须使用切片分配(x[:]=x[::-1]
),否则,您只需重新绑定本地名称x
,而不会影响它最初引用的列表。尽管在这两种情况下,x
不会在两种方法@chepner之后分配给相同的值吗?这不是预期的结果吗?我可能错了事实上我明白你的意思虽然OP不太清楚他们到底想要什么。我假设x
将是手头上唯一的变量。哦,我假设您提供了OP的反向
函数的主体。如果它是相同的范围,是的,这很好。不,这只是一个内联语句
def mutate_by_swapping(lst):
last_index = len(lst) - 1
for i in range(len(lst) // 2):
lst[i], lst[last_index - i] = lst[last_index - i], lst[i]