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