列表中唯一整数的总和

Sum of unique integers in a list

问题:给你一个整数数组 nums。数组的唯一元素是在数组中只出现一次的元素。

Returnnums所有唯一元素之和

我开始尝试删除所有非唯一号码并将唯一号码添加到单独的列表中。然而,当我打印新列表时,它 returns 与原始列表(在 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 为您提供独特项目的无序集合。

你的 if 语句的问题是你首先测试 nums 是否不在列表中,以防你将它添加到列表中,然后你再次测试 nums 是否在列表中(不使用 elif 或else 条件),这将始终为 True。而且你还在测试 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)


要对列表中只出现一次的数字求和,您可以这样做:

from collections import Counter

my_dct = Counter(my_list)
total = sum(k for k, v in my_dct.items() if v == 1)

目前的实施存在几个问题:

  1. 您使用多个 if 块,这意味着它们彼此独立,因此每次添加元素时都会从列表中删除该元素。我建议改用 dict 对象,因为假设元素出现奇数次(比如 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]))