代码之家  ›  专栏  ›  技术社区  ›  mikl

如何在Python列表中切换两个项目的位置?

  •  169
  • mikl  · 技术社区  · 16 年前

    我还没能在网上找到解决这个问题的好方法(可能是因为switch、position、list和Python都是重载词)。

    很简单,我有一个清单:

    ['title', 'email', 'password2', 'password1', 'first_name', 'last_name', 'next', 'newsletter']
    

    'password2' 'password1' 不知道他们的确切位置,只知道他们就在一起 password2 是第一个。

    我通过一些冗长的列表订阅完成了这一点,但我想知道有没有可能想出一些更优雅的东西?

    8 回复  |  直到 7 年前
        1
  •  431
  •   Tiago Peres damanpreet singh    5 年前
    i = ['title', 'email', 'password2', 'password1', 'first_name', 
         'last_name', 'next', 'newsletter']
    a, b = i.index('password2'), i.index('password1')
    i[b], i[a] = i[a], i[b]
    
        2
  •  185
  •   Can Berk Güder Pugalmuni    16 年前

    简单的Python交换如下所示:

    foo[i], foo[j] = foo[j], foo[i]
    

    i 是的,这很容易做到 index :

    i = foo.index("password2")
    
        3
  •  17
  •   Alex Martelli    16 年前

    >>> L = ['title', 'email', 'password2', 'password1', 'first_name', 'last_name', 'next', 'newsletter']
    >>> i = L.index('password2')
    >>> L[i:i+2] = L[i+1:i-1:-1]
    >>> L
    ['title', 'email', 'password1', 'password2', 'first_name', 'last_name', 'next', 'newsletter']
    

    切片指定的右侧是“反向切片”,也可以拼写为:

    L[i:i+2] = reversed(L[i:i+2])
    

    如果你觉得它更具可读性,就像很多人一样。

        4
  •  7
  •   unwind    16 年前

    tmp = my_list[indexOfPwd2]
    my_list[indexOfPwd2] = my_list[indexOfPwd2 + 1]
    my_list[indexOfPwd2 + 1] = tmp
    

    这只是使用临时存储的简单交换。

        5
  •  1
  •   Aditya    7 年前
    for i in range(len(arr)):
        if l[-1] > l[i]:
            l[-1], l[i] = l[i], l[-1]
            break
    

    因此,如果最后一个元素大于位置处的元素 i 然后他们都被交换了。

        6
  •  -1
  •   SmartElectron    10 年前

    >>> test_list = ['title', 'email', 'password2', 'password1', 'first_name',
                     'last_name', 'next', 'newsletter']
    >>> reorder_func = lambda x: x.insert(x.index('password2'),  x.pop(x.index('password2')+1))
    >>> reorder_func(test_list)
    >>> test_list
    ... ['title', 'email', 'password1', 'password2', 'first_name', 'last_name', 'next', 'newsletter']
    
        7
  •  -1
  •   Trimax user5433596    9 年前

    我不是python方面的专家,但您可以尝试: 说

    i = (1,2)
    
    res = lambda i: (i[1],i[0])
    print 'res(1, 2) = {0}'.format(res(1, 2)) 
    

    res(1, 2) = (2,1)