[英]Sum of unique integers in a list
問題:給您一個 integer 數組 nums。 數組的唯一元素是在數組中只出現一次的元素。
返回 nums 的所有唯一元素的總和。
我開始嘗試刪除所有非唯一編號並將唯一編號添加到單獨的列表中。 但是,當我打印新列表時,它會返回與原始列表完全相同的列表(在 leetcode 上)。 誰能幫我解決這個問題? 謝謝!
class Solution:
def sumOfUnique(self, nums: List[int]) -> int:
lists = []
double = []
for i in nums:
if nums not in lists:
lists.append(i)
if nums in lists:
lists.remove(i)
else:
pass
print(lists)
如果您對可以使用的數據結構沒有任何限制,它應該像這樣簡單
def sumOfUnique(your_input_list):
result = sum(set(your_input_list))
return result
Set為您提供了一個無序的獨特項目集合。
要總結列表中恰好出現一次的數字,您可以執行以下操作:
from collections import Counter
my_dct = Counter(my_list)
total = sum(k for k, v in my_dct.items() if v == 1)
您的 if 語句的問題在於,您首先測試 nums 是否不在列表中,以防您將其添加到列表中,然后再次測試 nums 是否在列表中(不使用 elif 或 else 條件),並且這總是正確的。 而且您正在測試 nums 是否在您的列表中,而不是您在 for 循環中迭代的 i 變量。 因此,在嘗試將其轉換為代碼之前,可能需要一些時間來找到合適的條件。
更新:使用計數器:
from collections import Counter
class Solution:
def sumOfUnique(self, nums):
counts = Counter(nums)
unique_list = [x for x in counts if counts[x] == 1]
return sum(unique_list)
目前的實現存在幾個問題:
您使用多個if
塊意味着它們彼此獨立,因此每次添加時都會從列表中刪除該元素。 我建議使用dict
object 來代替想象元素出現奇數次(例如 3 次),然后您將添加、刪除和重新添加元素。
if nums not in lists
不正確,可能你的意思是if i not in lists
。
這是沒有 class 的方法的簡化版本:
def sumOfUnique(nums):
counts = {}
for i in nums:
if i in counts.keys():
counts[i] += 1
else:
counts[i] = 1
uniques = [k for k, v in counts.items() if v == 1]
print(uniques)
return sum(uniques) # return the sum of the list elements
print(sumOfUnique([1, 2, 1, 3, 4, 1]))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.