交换 10 的倍数的元素

elements which are multiples of 10 are swapped

10 的倍数的元素与列表中下一个位置的值交换。

例如列表P的内容是:

[91, 50, 54, 22, 30, 54]

那么列表P的内容应该变成:

[91, 54, 50, 22, 54, 30]

但我得到的是:

[91, 54, 50, 54, 22, 54, 30, 54]

正在重复 10 的非倍数元素。

谁能给我一个解决方案。谢谢

注意:假设连续的元素不是10的倍数,并且最后一个元素不是10的倍数。

   l=[]
   c=[]
   n=int(input("Enter number of elements:"))
   for i in range(1,n+1):
    b=int(input("Enter element:"))
    l.append(b)
   s=len(l)
   for i in range(s): 
   if l[i] % 10 == 0: 
    c.append(l[i+1])
    c.append(l[i])
    i+=1
   else:
    c.append(l[i])
   print(c)

一种方法:

l = [91, 50, 54, 22, 30, 54]
pos = 1
while pos < len(l) - 1:
    if l[pos] % 10 == 0:
        l[pos], l[pos+1] = l[pos+1], l[pos]
        pos += 2
    else:
        pos += 1
print(l)

在第二个for循环(for i in range(s))下不需要i += 1,因为i会在下一次循环中自动更新。为了解决这个问题,你可以在追加到else块之前检查元素是否存在于“c”中。

在这种情况下,您无法继续前进,因为您会将目标元素一直移动到最后。避免这种情况的一个好技巧是向后循环,然后就很容易了。

免责声明:正如下面 Daniel Hao 所指出的,这不适用于十的连续倍数!!

data = [91, 50, 54, 22, 30, 54]

for i in reversed(range(len(data))):
    if data[i] % 10 == 0:
        # move the item one slot to the right
        data.insert(i+1, data.pop(i))