首页 > 解决方案 > 检测数字中的重复项(Python)

问题描述

我目前正在从事一个小项目,该项目涉及分析选票并根据他们获得的票数确定获胜候选人。投票系统很不寻常。例如,如果有四个候选人,投票可能如下所示:2341(第一个候选人 2 个,第二个候选人 3 个,等等)。但是,如果投票看起来像这样: 2334 它是无效的,相同的数字不能在投票中使用两次。我想知道是否有办法检查数字中的重复数字。我已经有了一个解决方案,但是它不适用于我的所有测试用例。

当前代码:

voteListString = ['2314', '4432', '4312', '1243', '1234', '2431'] # 4432 should get removed (it doesn't)
for i, voteString in enumerate(voteListString):
        newI = i+1
        duplicateCheck = voteString.count(f"{newI}")
        if duplicateCheck > 1:
            voteInt = int(voteString)
            voteList.remove(f"{voteInt}")
            spoiltBallots += 1
        else:
            validVoteList.append(voteString)

上面的代码是一个 for 循环,它遍历已转换为字符串的投票列表。然后它会计算“i”在投票中出现的次数,如果出现多次,它将从列表中删除。这仅适用于我的一个测试用例。如果有更好的方法可以做到这一点,我将非常感谢您的帮助。提前致谢。

标签: python

解决方案


利用set

def is_valid(vote):
    return len(set(vote)) == len(vote)

print(is_valid('4432')) # False
print(is_valid('1234')) # True

voteListString = ['2314', '4432', '4312', '1243', '1234', '2431']

new_vote_list_string = list(filter(is_valid, voteListString))

print(new_vote_list_string)
['2314', '4312', '1243', '1234', '2431']

推荐阅读