python整数和列表_列表和整数Python

假设实际缩进如下: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

…问题是你在循环中将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。在SpecialNum = 10

def number_move(move_number, special_num=SpecialNum):

for x, element in reversed(list(enumerate(move_number))):

if element == special_num:

while x+1 < len(move_number):

move_number = (move_number[:x] +

[move_number[x+1], move_number[x]] +

move_number[x+2:])

yield move_number

x += 1

现在,它会一步一步地把10年中所有的都移到最后。像这样:>>> n = [1, 10, 2, 3, 10, 4, 5, 6]

>>> for x in number_move(n):

... print(x)

[1, 10, 2, 3, 4, 10, 5, 6]

[1, 10, 2, 3, 4, 5, 10, 6]

[1, 10, 2, 3, 4, 5, 6, 10]

[1, 2, 10, 3, 4, 5, 6, 10]

[1, 2, 3, 10, 4, 5, 6, 10]

[1, 2, 3, 4, 10, 5, 6, 10]

[1, 2, 3, 4, 5, 10, 6, 10]

[1, 2, 3, 4, 5, 6, 10, 10]

[1, 2, 3, 4, 5, 6, 10, 10]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值