Python问题:用于构建从列表中检索元素的函数的应用问题



问题:有一场马拉松比赛,你有一份参赛者名单。(例如:["杰克"、"迈克"、"约翰"](参与者的数量是介于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)

最新更新