Python 中如何压缩不均匀元组


简介

在 Python 中,元组是根据需求存储和处理数据的一种广泛使用的方法。元组中涉及许多操作,其中数据会根据问题陈述的要求进行预处理和转换。压缩操作是压缩不同元组的最常见和最广泛使用的操作之一。

在本文中,我们将讨论 Python 中不均匀元组的压缩,不均匀元组的压缩到底意味着什么,以及使用代码解释执行相同操作的不同方法。本文将帮助人们了解不均匀元组压缩背后的核心思想,并在需要时帮助人们执行相同的操作。

所以现在让我们从讨论 Python 中压缩的含义和 Python 中不均匀元组的压缩开始。

什么是压缩不均匀元组?

在 Python 中,“zip” 或“压缩”表示我们将不同元组的元素加起来,这意味着我们将不同元组的元素配对并将其存储在一个公共元组中。

例如,如果我们有两个这样的元组

T1 = (1, 2, 3)

T2 = (“one”, “two”, “three”)

那么对这些元组进行压缩操作将给出以下输出

T_Zip = ((1, “one”), (2, “two”), (3, “three”))

这里,不均匀元组表示两个元组的大小或长度不相等,这意味着其中一个元组的大小比另一个元组小或大。对于大小或长度相同的元组,压缩操作非常容易,但当涉及到压缩两个不同大小或不均匀的元组时,它会变得非常复杂。

但是,有一些方法可以用来压缩两个不均匀的元组。让我们逐一讨论一下。

压缩不均匀元组

主要有三种方法可以用来压缩 Python 中的不均匀元组。

  • 使用 For 循环和枚举

  • 使用列表推导式

  • 使用 Numpy 库

方法 1:使用 For 循环和枚举

我们可以使用 for 循环和 enumerate 函数压缩不均匀元组。这是执行此操作的最简单有效的方法之一。

# using for loop and enumerate 

# define the tuples
test_tup1 = (7, 8, 4, 5)
test_tup2 = (1, 5, 6)

# print the input tuples
print("The input  tuple 1 is : " + str(test_tup1))
print("The input  tuple 2 is : " + str(test_tup2))

res = []


# use for loop with enumerate 
for i, j in enumerate(test_tup1):
  res.append((j, test_tup2[i % len(test_tup2)]))

# Print the final resultant tuple after zipping tuple 1 and 2
print("The output zipped tuple from tuple 1 and 2 is : " + str(res))

正如我们在上面的代码中看到的,元组 1 和 2 用 () 定义,它们的大小或长度不同。

现在,for 循环与 enumerate 一起使用,它追加元组 1 和元组 2 的元素,并以元组格式给出输出。

输出

以下代码的输出将是

The input tuple 1 is : (7, 8, 4, 5) 
The input tuple 2 is : (1, 5, 6) 
The output zipped tuple from tuple 1 and 2 is : [(7, 1), (8, 5), (4, 6), (5, 1)]

方法 2:使用列表推导式

可以使用列表推导式压缩两个不均匀的元组。这里可以使用三元运算符。

# using list comprehension

# define the tuples 
tup1 = (7, 8, 4, 5)
tup2 = (1, 5, 6)

# print the input tuples 
print("The input tuple 1 is : " + str(tup1))
print("The input tuple 2 is : " + str(tup2))

# define if else conditions
res = [(tup1[i], tup2[i % len(tup2)])
  if len(tup1) > len(tup2)

  else (tup1[i % len(tup1)], tup2[i])

  # use for loop on tuple 1 and 2
  for i in range(max(len(tup1), len(tup2)))]

#Print the final resultant tuple after zipping tuple 1 and 2
print(" The output zipped tuple from tuple 1 and 2 is :" + str(res))

正如我们在上面的代码中看到的,定义了两个不同大小的元组,然后编写了 if else 条件,其中首先检查元组的长度,然后最终的 for 循环追加两个元组并返回输出。

输出

以下代码的输出将是

The input tuple 1 is : (7, 8, 4, 5) 
The input tuple 2 is : (1, 5, 6) 
The output zipped tuple from tuple 1 and 2 is : [(7, 1), (8, 5), (4, 6), (5, 1)]

方法 3:使用 Numpy 库

Numpy 是用于对数据执行操作的最广泛使用的库之一。这里使用数组格式的数据,我们可以使用 numpy 做几乎任何事情并将数据转换为任何内容。

#using numpy module to zip the uneven tuples 

# Importing the numpy module
import numpy as np

# define the tuples
test_tup1 = (7, 8, 4, 5)
test_tup2 = (1, 5, 6)

# convert the tuples into array format
arr1 = np.array(test_tup1)
arr2 = np.array(test_tup2)

# use np.tile 
arr2_tiled = np.tile(arr2, (len(arr1) // len(arr2) + 1))[:len(arr1)]

#use column_stack on array 1 and tiled array 2 to zip the tuples 
res_arr = np.column_stack((arr1, arr2_tiled))

# convert the array output to the tuple
res = tuple(map(tuple, res_arr))

# Print the final resultant tuple after zipping tuple 1 and 2
print("The output zipped tuple from tuple 1 and 2 is : " + str(res))

正如我们在上面的代码中看到的,我们首先导入了 numpy 库,然后定义了两个不同大小的元组。

然后,如上所述,numpy 库需要数组格式的数据才能处理它,因此元组被传递给 np.array,它将数据转换为数组格式。

一旦我们以数组形式获得了元组,np.column_stack 用于追加数组的元素,并压缩元组。

然后,使用 tuple() 函数将最终数组再次转换为元组。

输出

以下代码的输出将是

The output zipped tuple from tuple 1 and 2 is : ((7, 1), (8, 5), (4, 6), (5, 1))

结论

在本文中,我们讨论了两个不均匀元组或两个不同大小(长度)元组的压缩操作。上面讨论的压缩不均匀元组的三种不同方法将帮助人们了解压缩操作,并在需要时帮助人们执行相同的操作。

更新于:2023 年 7 月 27 日

114 次查看

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告