Python 列表中唯一整数的和

Python 列表中唯一整数的和,python,python-3.x,list,integer,Python,Python 3.x,List,Integer,问题:给您一个整数数组nums。数组的唯一元素是在数组中只出现一次的元素 返回NUM的所有唯一元素的总和 我从尝试删除所有非唯一编号开始,并将唯一编号添加到单独的列表中。但是,当我打印新列表时,它返回与原始列表完全相同的列表(在leetcode上)。有人能帮我解决这个问题吗?谢谢 class Solution: def sumOfUnique(self, nums: List[int]) -> int: lists = [] double = [] for i in

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

返回NUM的所有唯一元素的总和

我从尝试删除所有非唯一编号开始,并将唯一编号添加到单独的列表中。但是,当我打印新列表时,它返回与原始列表完全相同的列表(在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(您的输入列表):
结果=总和(设置(您的输入列表))
返回结果

Set为您提供一个无序的唯一项集合。

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)



要对列表中只出现一次的数字求和,可以执行以下操作:

from collections import Counter

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

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

  • 您可以使用多个
    if
    块,这意味着它们彼此独立,因此每次添加元素时都会将其从列表中删除。我建议使用
    dict
    对象,因为假设元素出现奇数次(比如3次),然后添加、删除并重新添加元素

  • 如果nums不在列表中
    是不正确的,您可能是指
    如果我不在列表中

  • 以下是不带类的方法的简化版本:

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

    您正在检查整个输入列表
    nums
    是否在
    列表中。您想检查
    i
    是否在
    列表中。之后不需要删除内容,也不需要执行
    else:pass
    。他们只想对列表中恰好出现一次的数字求和。这将累加所有不同的数字,与它们在列表中出现的频率无关。@Saverio Guzzo,函数set()返回一个唯一整数列表,其中我需要一组唯一整数,如果一个整数中有多个,我们将其从返回[1,2,3]列表的最终sum中删除,但我需要一个[1,3]的l列表作为数字2返回的值在本例中不是唯一的list@D-python我已经用Counter而不是set更新了答案。