我试图写一个代码来改变列表中一个整数的位置(基本上是用另一个整数交换位置)
我尝试了所有的逻辑,但还是不明白为什么我的代码会出错:
SpecialNum = 10
def number_move(move_number):
for elements in range(len(move_number)):
if ( SpecialNum != move_number[-1]):
x = move_number.index(SpecialNum)
y = move_number.index(SpecialNum)+1
move_number[y], move_number[x] = move_number[x], move_number[y]
return (move_number)
输出应为:
^{pr2}$但产出如下:
[1,2,3,4,5,6,10]
假设实际缩进如下:
…问题是你在循环中将
10
反复交换到右边,直到它到达最后。在如果这不是您想要的,为什么您首先要使用
for elements in range(len(move_number))
?把它拿出来,只会换一次。在另外,您很少需要
range(len(eggs))
;您可以只做for egg in eggs
(或者,如果您需要索引和实际对象,for index, egg in enumerate(eggs)
)。在另外,还有很多不需要的额外括号,这使得代码更难阅读。在
同时,每次调用
index
都必须搜索整个列表以找到对象的位置;如果您已经知道对象的位置,则最好直接使用它。如果列表中有两个元素的值相同,index
只能找到第一个元素,它不仅速度快,而且更简单,而且更健壮。在您的例子中,没有明显的方法可以使用index
,但至少可以避免调用它两次。在综合起来:
^{pr2}$最后,我说了使用
index
没有明显的方法,但是有没有不明显的方法?当然。如果要在同一个对象上重复调用index
,我们可以将最后找到的索引作为函数接口的一部分,甚至可以在函数内部存储一个缓存。最简单的方法就是把整个东西变成发电机。一个改变参数的生成器可能有点混乱,所以让它返回副本。最后,为了使其可定制,让我们取一个参数,以便您可以指定一个不同于10的SpecialNum。在现在,它会一步一步地把10年中所有的都移到最后。像这样:
您不需要
for
循环:)备选方案:
^{pr2}$相关问题 更多 >
编程相关推荐