Python变量交换不能正常工作?

Python变量交换不能正常工作?,python,arrays,list,sorting,python-3.x,Python,Arrays,List,Sorting,Python 3.x,我编写了一个代码来反转列表中的元素。在这里,我应用了一种算法,即从0到字符串长度运行一个循环,并在运行过程中交换值。我基本上使用第三个临时变量一次在两个变量之间切换: l = [1, 2, 3, 4, 5] g = len(l) - 1 for i in range (0, len(l)): m = l[i] l[i] = l[g] l[g] = m g -= 1 print(l) 但是,我打印的是原始列表。从逻辑上讲,我没有看到代码中的任何缺陷。据我所知,所有

我编写了一个代码来反转列表中的元素。在这里,我应用了一种算法,即从0到字符串长度运行一个循环,并在运行过程中交换值。我基本上使用第三个临时变量一次在两个变量之间切换:

l = [1, 2, 3, 4, 5]
g = len(l) - 1
for i in range (0, len(l)):
    m = l[i]
    l[i] = l[g]
    l[g] = m
    g -= 1
print(l)

但是,我打印的是原始列表。从逻辑上讲,我没有看到代码中的任何缺陷。据我所知,所有内容都已正确交换。

逻辑的问题在于,您正在循环整个列表。由于在循环的每一圈交换2个元素,因此只需迭代列表的一半即可交换所有值

换句话说,当您迭代列表索引的前半部分时,您会将其反转。然后,当您在索引的后半部分进行迭代时,将其反转回来


另外,在python中交换值的一种非常酷的方法是:

a, b = b, a
或者在您的情况下:

l[i], l[g] = l[g], l[i]

尝试:对于(0,len(l)/2范围内的i:@PasteBT——我建议整数除法:
len(l)//2
@mgilson:你的意思是“5/2!=5//2”?@PasteBT正确。在python2.x上,该语句是
False
(除非启用了未来除法,否则它们是相同的),但在python3.x上是
True
(它们是不同的)@mgilson。谢谢,我还没有使用Python3。说到很酷的方法,
l[::-1]
将在一行中完成OP想要做的事情:Pgot it。谢谢,但如果列表中的元素数是奇数,我该怎么办?我有特殊条件吗?@师父——当然。。。或者
l.reverse()
:)@amin——我相信你可以玩转它,把它弄明白;-)。我想得不太清楚,但我认为你不需要特殊的条件。只需使用整数除法,因为中间的元素不需要用任何东西交换。@mgilson-alrite-man,谢谢。我一会儿就把你的答案记下来
#loop time should be len(1)/2

l = [1, 2, 3, 4, 5]
g = len(l) - 1
for i in range (0, len(l)/2):
    m = l[i]
    l[i] = l[g]
    l[g] = m
    g -= 1
print(l)