簡體   English   中英

列表中唯一整數的總和

[英]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)


目前的實現存在幾個問題:

  1. 您使用多個if塊意味着它們彼此獨立,因此每次添加時都會從列表中刪除該元素。 我建議使用dict object 來代替想象元素出現奇數次(例如 3 次),然后您將添加、刪除和重新添加元素。

  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM