首页 > 解决方案 > 为什么我的程序返回的是次数而不是数字本身?

问题描述

我试图返回列表中出现奇数次的数字。现在,它正在返回该数字在列表中出现的次数。例如,在这段代码中,返回的是[3, 3, 3]我希望它返回4

def num_occurrence_lc(arr, num):
    lc = [1 for x in arr if x == num]
    return sum(lc)

def getOddOccurrence_lc(arr):
    """returns the number stated an odd number of times in the
    sequence"""
    num_occ_list = [num_occurrence_lc(arr, x) for x in arr]
    odd_occ_list = [z for z in [z for z in num_occ_list if z%2!=0]]
    return odd_occ_list
print(getOddOccurrence_lc([1,2,4,2,4,1,4]))

标签: python

解决方案


我相信你在num_occurrence_lc(arr, num). 您正在存储计数而不是数字本身。请尝试以下操作:

from collections import namedtuple

def count_num(arr, num):
    return arr.count(num)

def getOddOccurrence_lc(arr):
    count_tup = namedtuple('num_count', ['num', 'count'])
    arr_counts = [count_tup(str(num), count_num(arr, num)) for num in list(set(arr))]
    odd_arr_counts = [int(tup.num) for tup in arr_counts if tup.count%2 != 0]
    return odd_arr_counts

如果你运行print(getOddOccurrence_lc([1,2,4,2,4,1,4])),你会得到输出:

>>> print(getOddOccurrence_lc([1,2,4,2,4,1,4]))
[4]

我将输出设为列表而不是单个数字的原因是为了概括arr输入,以考虑到可能有多个数字出现奇数的可能性。因此,例如,print(getOddOccurrence_lc([1,2,4,2,4,1,1,4]))您将获得:

>>> print(getOddOccurrence_lc([1,2,4,2,4,1,1,4]))
[1, 4]

推荐阅读