首页 > 解决方案 > 如果其中一个是奇数,则交换整数列表的相反元素

问题描述

编写一个程序,定义一个名为 Array_Swap() 的函数,该函数将接受一个整数列表及其大小作为参数,该函数将以这样的方式交换元素,即第一个元素与最后一个元素交换,第二个元素交换使用倒数第二个元素,依此类推,只有当任何一个或两个元素都是奇数并显示结果时。

如果最初,一个由七个元素组成的列表是:[5, 16, 4, 7, 19, 8, 2],则执行后列表的内容应该是: [2, 16, 19, 7, 4, 8, 5]

def Array_Swap(List,Size):
    for i in range (Size//2):
        List[i]=List[Size//2-i]
    print(List)

L=[]
n=int(input("Enter number of elements"))
for i in range(n):
    x=int(input("Enter element"))
    L.append(x)
Array_Swap(L,len(L))

标签: pythonlist

解决方案


列表的大小/长度无关紧要,因为它可以通过 获得len(list)。即便如此,也不需要有条件地交换列表中的项目。我建议Size删除该参数,但考虑到它是一个赋值,可以给它一个默认值,None以便调用者可以在需要时忽略它。

下面的算法将输入列表与它的反向压缩,以分别从列表的前面和结尾形成相对于它们的索引的对,即第一个和最后一个项目配对,第二个和倒数第二个配对,等等。一旦项目是配对它只是一个简单的迭代列表的问题,如果其中一个数字是奇数,则发出该对的第二个数字,或者如果两者都不为奇数,则发出第一​​个数字 - 根据需要有效地交换对。

List[:]这是通过列表理解就地完成的(这就是所做的)。

def ArraySwap(List, Size=None):
    List[:] = [b if (a % 2 or b % 2) else a
                for a, b in zip(List, reversed(List))]
    print(List)

>>> l = [5, 16, 4, 7, 19, 8, 2]
>>> ArraySwap(l)
[2, 16, 19, 7, 4, 8, 5]
>>> l
[2, 16, 19, 7, 4, 8, 5]
>>> l = list(range(1,30))
>>> ArraySwap(l)
[29, 2, 27, 4, 25, 6, 23, 8, 21, 10, 19, 12, 17, 14, 15, 16, 13, 18, 11, 20, 9, 22, 7, 24, 5, 26, 3, 28, 1]
>>> ArraySwap([1])
[1]
>>> ArraySwap([])
[]

推荐阅读