python - 如果其中一个是奇数,则交换整数列表的相反元素
问题描述
编写一个程序,定义一个名为 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))
解决方案
列表的大小/长度无关紧要,因为它可以通过 获得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([])
[]
推荐阅读
- algorithm - 找到具有特定总和的数字对
- c++ - 位设置为浮点值或双精度值 C++
- javascript - 用于浏览网站的 JavaScript 脚本?
- sqlite - System.BadImageFormatException:试图加载格式不正确的程序。(来自 HRESULT 的异常:0x8007000B)在
- swift - 在 Swift 泛型类型中包含继承约束
- php - Laravel 项目 - 邮递员转义字符
- java - JNA - 如何从 SysTreeView 获取第一项
- c# - OpenXML 异步 C#
- postgresql - pgbouncer:致命无法加载配置文件
- java - 如何在 Java 中将控制台数据转换为文本文件