如何将Python 元组进行反转

正如我们所知,在 Python 中,元组是不可变的,因此它不能被改变或更改。与列表不同,这为我们提供了有限的反转元组的方法。我们将通过一些技术来了解如何反转 python 中的元组。例子:

Input : tuples = ('z','a','d','f','g','e','e','k')
Output : ('k', 'e', 'e', 'g', 'f', 'd', 'a', 'z')

Input : tuples = (10, 11, 12, 13, 14, 15)
Output : (15, 14, 13, 12, 11, 10)

方法一:使用切片技术。

在这种技术中,创建了元组的副本并且元组没有就地排序。由于元组是不可变的,因此无法就地反转元组。创建副本需要更多空间来容纳所有现有元素。因此,这会耗尽内存。 

# Reversing a tuple using slicing technique
# New tuple is created
def Reverse(tuples):
    new_tup = tuples[::-1]
    return new_tup
     
# Driver Code
tuples = ('z','a','d','f','g','e','e','k')
print(Reverse(tuples))

输出:

('k', 'e', 'e', 'g', 'f', 'd', 'a', 'z')

方法 2:使用 reversed() 内置函数。

在这种方法中,我们不制作元组的任何副本。相反,我们得到一个反向迭代器,我们用它来循环遍历元组,类似于列表。 

# Reversing a list using reversed()
def Reverse(tuples):
    new_tup = ()
    for k in reversed(tuples):
        new_tup = new_tup + (k,)
    print new_tup
 
# Driver Code
tuples = (10, 11, 12, 13, 14, 15)
Reverse(tuples)

输出:

(15, 14, 13, 12, 11, 10)

方法三:迭代

您可以使用的另一种方法是创建一个新的空元组,然后以相反的顺序遍历原始元组,将每个元素添加到新元组中。这种方法需要创建一个新的元组并逐个添加每个元素,因此它的效率可能不如其他方法。

以下是如何使用此方法反转元组的示例:

def reverse_tuple(t):
    new_tuple = ()
    for i in range(len(t)-1, -1, -1):
        new_tuple += (t[i],)
    return new_tuple
 
tuples = ('z','a','d','f','g','e','e','k')
print(reverse_tuple(tuples))
# Output: ('k', 'e', 'e', 'g', 'f', 'd', 'a', 'z')

输出

('k', 'e', 'e', 'g', 'f', 'd', 'a', 'z')

方法 4:使用递归

# recursive function
def reverse_tuple(t):
  #condition checking
    if len(t) == 0:
        return t
    else:
        return(t[-1],)+reverse_tuple(t[:-1])
original_tuple = ('z','a','d','f','g','e','e','k')
# function call
reversed_tuple = reverse_tuple(original_tuple)
print("Original Tuple: ", original_tuple)
print("Reversed Tuple: ", reversed_tuple)

输出

Original Tuple:  ('z', 'a', 'd', 'f', 'g', 'e', 'e', 'k')
Reversed Tuple:  ('k', 'e', 'e', 'g', 'f', 'd', 'a', 'z')

时间复杂度 O(n)

空间复杂度 O(n)

本文根据geeksforgeeks翻译而来,不代表烟海拾贝立场,如若转载,请注明出处:https://somirror.com/4819.html

(0)
上一篇 2023-02-07 17:19
下一篇 2023-02-08 13:21

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注