检测数字中的重复项(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”在投票中出现的次数,如果出现不止一次,它将从列表中删除。这仅适用于我的一个测试用例。如果有更好的方法来做到这一点,我将非常感谢您的帮助。提前致谢。
回答
用 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']