Python 交换整数列表中的相反元素(如果其中一个为奇数)

Python 交换整数列表中的相反元素(如果其中一个为奇数),python,list,Python,List,使用名为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):

使用名为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))
  • 要交换列表中的两个元素,请使用模式
    a,b=b,a
  • 如果
    i
    是列表项的索引,则它的相反/镜像元素是
    -(i+1)
    ,或
    -i-1
    • 因此,对于第0个元素(第一个元素),镜像是
      -(0+1)
      ,=-1
    • 使用它作为元素的索引器,交换两个列表元素IF
  • 在交换之前,请检查其中至少有一个为奇数:
  • def阵列交换(列表,大小):
    对于范围内的i(尺寸//2):
    如果列表[i]%2==1或列表[-(i+1)]%2==1:
    列表[i],列表[-(i+1)]=列表[-(i+1)],列表[i]
    打印(列表)
    L=[5,16,4,7,19,8,2]#像以前一样使用输入块,这是一个示例
    阵列交换(L,len(L))
    
    输出:
    [2,16,19,7,4,8,5]

    (如果
    L=[5,16,4,7,19,8,1,2]
    ,则输出为
    [2,1,4,19,7,8,16,5]

    顺便说一句,您不需要将列表的大小作为参数传入。

    您可以这样做:
    对于范围内的i(len(List)//2)
    在Python中交换两个变量的标准方法是:

    a, b = b, a
    
    在这种情况下,您将执行以下操作:

    lst[i], lst[size - i - 1] = lst[size - i - 1], lst[i]
    
    它将
    i
    th元素与索引
    size-i-1
    处的元素交换(即从末尾开始的
    i
    th索引)

    代码的另一个问题是,它不会检查被交换的元素是否为奇数,您可以通过添加以下条件来解决:

    if lst[i] % 2 or lst[size - i - 1] % 2:
    
    在交换之前。这将使用模运算符(
    %
    )检查元素的奇偶性。如果数字是奇数,则取模2的数字将返回1。如果其中一个为奇数(1的真值为
    True
    ),则条件将成功,并将执行交换

    最后,您的函数是
    print
    ing列表,而不是
    return
    ing列表。通常最好返回结果并打印返回的结果

    完整的工作版本,包括上述三个变更如下:

    def list_swap(lst, size):
        for i in range(size // 2):
            if lst[i] % 2 or lst[size - i - 1] % 2:
                lst[i], lst[size - i - 1] = lst[size - i - 1], lst[i]
        return lst
    
    l = []
    
    n = int(input("Enter number of elements: "))
    for _ in range(n):
        x = int(input("Enter element: "))
        l.append(x)
    
    result = list_swap(l, len(l))
    print(result)
    
    还要注意的是,我将所有变量都改为小写,这在Python中是标准的

    以您的示例为例:

    Enter number of elements: 7
    Enter element: 5
    Enter element: 16
    Enter element: 4
    Enter element: 7
    Enter element: 19
    Enter element: 8
    Enter element: 2
    [2, 16, 19, 7, 4, 8, 5]
    
    另一个解决方案:

    def Array_Swap(List, Size=None):
        if Size is None:
            Size = len(List)
        for (i, j) in zip(range(Size // 2), range(Size - 1, Size // 2, -1)):
            if List[i] % 2 or List[j] % 2:
                List[i], List[j] = List[j], List[i]
        print(List)
    
    或者:

    • Size
      参数是多余的,因为python的
      list
      实例知道自己的大小
    • 使用位运算符。。。可能比模
      %
      和除法
      /
      操作更便宜

    列表的大小/长度不相关,因为它可以通过
    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([])
    []
    

    这个问题毫无疑问。请参阅以及如何创建一个新的应用程序。@peter我有点不同意。尽管这个问题并不完美,但它比其他许多问题要好得多(不幸的是,这些问题的开放时间太长了)。在这种情况下,代码不起作用的原因其实有些明显(对我们来说,不是OP),所以这是一个公平的问题。@costaparas我不同意。这个问题表明没有任何研究工作。OP发布了他们的作业文本和非工作代码,没有其他内容。他们没有说明问题是什么,结果是否与预期不符,或者是否存在错误。他们还没有展示出用较少的数据量来尝试它。没有人试图解释。这个问题不太可能在将来帮助任何人,它的目的是让这个用户的家庭作业不受干扰。啊,你最好编辑你的标题。这个题目不太好。
    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([])
    []