代码之家  ›  专栏  ›  技术社区  ›  Ξένη Γήινος

Python在两个int的两个元组之间交换元素

  •  2
  • Ξένη Γήινος  · 技术社区  · 4 年前

    问题是:在满足以下所有条件的两个元组之间交换第二个元素:由两个元组组成 int s、 各就各位 range(5) ,相同位置的元素不相等

    如果他们是两个 list 我可以简单地使用变量交换和索引,但是 tuple s是不可变的,所以我将两个元组解压到一个列表中,并将该列表解压到四个变量中,然后对变量重新排序。。。

    (请参见声明变量的初始值,打印的值为预期结果。)

    a, b = [1,2], [3,4]      
    a[1], b[1] = b[1], a[1]  
    print(a)                 
    print(b)                 
                             
    l1, l2 = (1,2), (3,4)    
    a, b, c, d = [*l1, *l2]  
    print((a, d))            
    print((c, b))            
    
    In [161]: a, b = [1,2], [3,4]
         ...: a[1], b[1] = b[1], a[1]
         ...: print(a)
         ...: print(b)
         ...:
         ...: l1, l2 = (1,2), (3,4)
         ...: a, b, c, d = [*l1, *l2]
         ...: print((a, d))
         ...: print((c, b))
    [1, 4]
    [3, 2]
    (1, 4)
    (3, 2)
    

    我不想将元组强制转换为列表,我想知道是否有更好的方法在两个元组之间交换第二个元素?

    2 回复  |  直到 4 年前
        1
  •  3
  •   eeegnu    4 年前

    你是对的,元组是不可变的,你将无法绕过创建新的元组。如果您只想在不使用解包符号的情况下执行此操作,您可以执行以下操作

    l1, l2 = (1,2), (3,4)
    a = (l1[0],l2[1])
    b = (l2[0],l1[1])
    

    如果这里关注速度,那么使用pypy运行它将非常有效。

        2
  •  0
  •   rv.kvetch    4 年前

    t = (1, 2)
    
    swapped = t[::-1]
    
    # true
    assert type(swapped) == tuple
    assert swapped == (2, 1)