Python - 唯一值乘积
Python 中的列表允许重复项,也就是说,我们可以在列表中两次拥有相同的值。这在大多数情况下很有用,但有时需要删除重复元素以执行某些操作。在本文中,我们将重点介绍如何提取整数列表中唯一的元素(去除重复元素),并找到它们的乘积。它具有广泛的用例场景,我们将尝试讨论所有可能生成输出的方法。
方法 1:集合实现
Python 中的集合是可迭代、可变的无序数据集合,但没有重复元素。因此,这可以帮助我们从列表中获取唯一的数据集。set() 函数帮助我们实现相同的功能。让我们开始编码。
示例
def prodUniq(listEnter):
res = 1
for item in listEnter:
res *= item
return res
#initial list
userList = [24, 15, 24, 41, 22, 11, 11, 51]
#unique list
uniqList = list(set(userList))
#product output
res = prodUniq(uniqList)
print("User entered list: ",userList)
print("Unique Values List: ",uniqList)
print("Unique Values Multiplication: ",res)
输出
User entered list: [24, 15, 24, 41, 22, 11, 11, 51] Unique Values List: [41, 11, 15, 51, 22, 24] Unique Values Multiplication: 182167920
方法 2:使用另一个列表
现在,我们将尝试在没有其他数据集合(而是列表)的帮助下获取乘积。我们将借助一个空列表来过滤唯一的元素,然后找到乘积。让我们保持乘积函数不变。
示例
def prodUniq(listEnter):
res = 1
for item in listEnter:
res *= item
return res
#initial list
userList = [24, 15, 24, 41, 22, 11, 11, 51]
#unique list generation
uniqList = []
for item in userList:
if item not in uniqList:
uniqList.append(item)
res = prodUniq(uniqList)
print("User entered list: ",userList)
print("Unique Values List: ",uniqList)
print("Unique Values Multiplication: ",res)
输出
User entered list: [24, 15, 24, 41, 22, 11, 11, 51] Unique Values List: [24, 15, 41, 22, 11, 51] Unique Values Multiplication: 182167920
一种简单的方法,我们迭代现有的列表以检查任何项目是否存在于空唯一列表中,如果不存在则插入它。因此,我们可以轻松地过滤掉重复元素,然后将其传递到现有的乘积函数中以获取乘积。
时间复杂度 − O()
辅助空间 − O()
方法 3:列表推导式
列表推导式是从现有列表生成新列表的较短语法。让我们尝试使用它来获取唯一的列表。列表推导式帮助我们在这里缩短代码。
示例
def prodUniq(listEnter):
res = 1
for item in listEnter:
res *= item
return res
#initial list
userList = [24, 15, 24, 41, 22, 11, 11, 51]
#unique list generation
uniqList = [item for index, item in enumerate(userList) if item not in userList[:index]]
res = prodUniq(uniqList)
print("User entered list: ",userList)
print("Unique Values List: ",uniqList)
print("Unique Values Multiplication: ",res)
输出
User entered list: [24, 15, 24, 41, 22, 11, 11, 51] Unique Values List: [24, 15, 41, 22, 11, 51] Unique Values Multiplication: 182167920
时间复杂度 − O()
辅助空间 − O()
方法 4:使用 Counter
在 collections 模块中,我们有一个字典子类,专门用于计算散列值。Counter 将值存储为键,并将它们的计数存储为字典中的值。我们可以借助键来获取唯一的列表。
示例
from collections import Counter
def prodUniq(listEnter):
res = 1
for item in listEnter:
res *= item
return res
#initial list
userList = [24, 15, 24, 41, 22, 11, 11, 51]
#count dictionary generated by counter
counterDict = Counter(userList)
#unique list generation
uniqList = counterDict.keys()
res = prodUniq(uniqList)
print("User entered list: ",userList)
print("Counter generated dict: ",counterDict)
print("Unique Values List: ",uniqList)
print("Unique Values Multiplication: ",res)
输出
User entered list: [24, 15, 24, 41, 22, 11, 11, 51]
Counter generated dict: Counter({24: 2, 11: 2, 15: 1, 41: 1, 22: 1, 51: 1})
Unique Values List: dict_keys([24, 15, 41, 22, 11, 51])
Unique Values Multiplication: 182167920
输出清楚地显示了 Counter() 函数实际上做了什么。我们巧妙地利用了 Counter 生成的字典中的键,因为它们表示列表中的唯一值,并忽略了它们的计数(值对)。然后是我们的简单乘积函数。
时间复杂度 − O()
辅助空间 − O()
方法 5:使用字典跟踪出现次数
可以使用字典来跟踪列表中每个元素。通过迭代列表并更新字典,我们可以获取列表中的唯一值并生成它们的乘积。它类似于计数器方法,只是排除了内置函数。
示例
def prodUniq(listEnter):
res = 1
#dictionary to keep track of each item
emptyDict = {}
for item in listEnter:
if item not in emptyDict:
emptyDict[item] = 1
res *= item
return res
#initial list
userList = [24, 15, 24, 41, 22, 11, 11, 51]
#product
res = prodUniq(userList)
print("User entered list: ",userList)
print("Unique Values Multiplication: ",res)
输出
User entered list: [24, 15, 24, 41, 22, 11, 11, 51] Unique Values Multiplication: 182167920
时间复杂度 − O()
辅助空间 − O()
方法 6:使用 NumPy
NumPy 是一个非常流行的库。它包含在统计和科学计算中广泛使用的强大工具。NumPy 中的 unique 和 prod 函数帮助我们轻松获得乘积输出。
示例
import numpy as np
#initial list
userList = [24, 15, 24, 41, 22, 11, 11, 51]
#unique list
uniqList = np.unique(userList)
#product
res = np.prod(uniqList)
print("User entered list: ",userList)
print("Unique list using numpy: ",uniqList)
print("Unique Values Multiplication using numpy: ",res)
输出
User entered list: [24, 15, 24, 41, 22, 11, 11, 51] Unique list using numpy: [11 15 22 24 41 51] Unique Values Multiplication using numpy: 182167920
unique 函数从现有列表生成一个非重复排序元素的列表。另一方面,prod 函数生成传递的列表中元素的乘积。
时间复杂度 − O()
辅助空间 − O()
方法 7:使用 itertools
Python 为我们提供了强大的 itertools 模块,其中包含有助于高效循环的工具和函数。在 itertools 库中,我们有一个 groupby() 函数,它可以帮助我们对唯一元素进行分组。在这种方法中,我们将尝试使用此函数来有效地创建唯一的列表。
示例
import itertools
#initial list
userList = [24, 15, 24, 41, 22, 11, 11, 51]
#unique list
uniqList = [key for key, group in itertools.groupby(sorted(userList))]
#product
res = 1
for item in uniqList:
res *=item
print("User entered list: ",userList)
print("Unique list: ",uniqList)
print("Unique Values Multiplication: ",res)
输出
User entered list: [24, 15, 24, 41, 22, 11, 11, 51] Unique list: [11, 15, 22, 24, 41, 51] Unique Values Multiplication: 182167920
务必使用 sorted 以确保 groupby() 函数正常运行。itertools.groupby() 函数实际上为每个唯一键及其关联组生成 (键,组) 对。对于我们的用例,我们只需要唯一值,因此我们使用列表推导式提取每个对的键部分。一旦我们有了唯一的列表,这次我们使用一个简单的 for 循环,其中我们将列表中的每个项目乘以一个预先创建的初始化为 1 的结果值。
时间复杂度 − O()
辅助空间 − O()
结论
本文到此结束,但探索其他可能性才刚刚开始。上面讨论的每种方法都以不同的方式进行,并取决于我们可以实现它们的具体需求。了解 Python 中这些小技巧有助于我们未来的大型项目。
尝试实现您自己版本的上述七种方法。Python 3.8+ 中的 set 和 math.prod() 函数是我们唯一值乘积问题陈述的一行解决方案。查看它,编码愉快。
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP