问题:有一场马拉松比赛,你有一份参赛者名单。(例如:["杰克"、"迈克"、"约翰"](参与者的数量是介于1到100000之间的随机整数。您还有完成马拉松比赛的参赛者名单。完成的参与者人数比总参与者少1人。可能有同名的参与者。你必须建立一个函数来打印没有完成马拉松比赛的参与者。
我的尝试:
def solution(participant, completion):
for i in completion:
if i in participant:
participant.remove(i)
answer = print ('"' + str(*participant) + '"')
return(answer)
例如,如果参与者=["john","mike"],完成=["john"],预期的答案是";迈克;我认为我尝试的代码没有错。如果有的话,你们能指出我遗漏的部分吗?最重要的是,有没有一种更优雅的方式来构建这个功能?
两个可能的改进:第一,如果总是只有一个参与者没有完成。
def solution(participant, completion):
for p in participant:
if p not in completion:
print( p )
return p
第二,如果n名参与者未完成:
def solution(participant, completion):
answer = []
for p in participant:
if p not in completion:
print( p )
answer.add(append)
#print( answer ) # if needed
return answer
如果你使用套装,你可以简单地使用
def short(participant, completion):
return set(participant) - set(completion)
参见:
- https://docs.python.org/2/library/sets.html
- https://www.w3schools.com/python/python_sets.asp
一个小提示:还有你的answer = print ('"' + str(*participant) + '"')
只适用于Python 3,Python2会引发SyntaxError,因为print不会返回任何内容(在Python 3中为None(。
for i in completion:
if i in participant:
participant.pop(i)
answer = print ('"' + str(*participant) + '"')
return(answer)