【问题标题】:Reversing of tuple containing more than 2 elements反转包含超过 2 个元素的元组
【发布时间】:2021-12-20 15:20:38
【问题描述】:

我正在尝试以不同的方式反转元组。我可以更改顺序吗(债券,詹姆斯,号码)。如果元组中只有 2 个元素,我知道如何更改它,但是当我有 3 个或更多元素时如何更改它?我得到了 (number,bond,james) 但如何以不同的方式做到这一点,而不仅仅是倒车。我的代码:

def change(lst):
    list2 = [t[::-1] for t in lst]
    list2.reverse()
    return list2

print(change([("James", "Bond", "300184"),("Harry", "Prince", "111000")]))

【问题讨论】:

  • 添加预期输出可能会有所帮助。
  • IIUC,您是否只想反转元组中的前两个元素,而将其余元素保持原样?

标签: python list indexing reverse


【解决方案1】:

如果您想反转前两个元素,我们可以在 for 循环中利用 tuple unpacking

lst = [("James", "Bond", "300184"),("Harry", "Prince", "111000")]
out = [(sec, fir, *rem) for fir, sec, *rem in lst]
print(out)
# [('Bond', 'James', '300184'), ('Prince', 'Harry', '111000')]

此解决方案将反转列表中的每个元组,如下所示:

(a, b, c...z) --> (b, a, c...z)
  • c...z 可以是 0 个或多个元素。

【讨论】:

    【解决方案2】:

    您可以使用 itertools 排列获得元组的所有可能组合:

    from itertools import permutations
    list1 = [("James", "Bond", "300184"), ("Harry", "Prince", "111000")]
    
    for tup in list1:
        possible_permutations = permutations(tup)
        print(tuple(possible_permutations))
    

    输出:

    (('James', 'Bond', '300184'), ('James', '300184', 'Bond'), ('Bond', 'James', '300184'), ('Bond', '300184', 'James'), ('300184', 'James', 'Bond'), ('300184', 'Bond', 'James'))
    (('Harry', 'Prince', '111000'), ('Harry', '111000', 'Prince'), ('Prince', 'Harry', '111000'), ('Prince', '111000', 'Harry'), ('111000', 'Harry', 'Prince'), ('111000', 'Prince', 'Harry'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 2011-09-27
      • 2014-05-02
      • 2017-12-08
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      相关资源
      最近更新 更多