打印列表中除Python中的一个以外的所有字符串元素

2024-04-19 04:16:50 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我在做一个随机安排NHL团队的计划。我有一份来自大西洋分部的小名单:

atl_div = ["BOS", "BUF", "DET", "FLA"]

当用户输入团队缩写时,他们会得到打印到他们的元素,减去列表中的团队,例如,如果我输入BUF,用户会得到:

BOS
DET
FLA

我试过了

input_team = input("Enter a team abbrev.:")

if input_team == "BUF":
   print(atl_div[~0])

但这行不通,因为~用于数字而不是列表。你知道吗

我必须承认我是一个有点新手程序员,所以如果我的问题听起来像这样,我很抱歉。我们都从某处开始:)

感谢您的帮助,如有必要,请随时询问更多细节!你知道吗


Tags: 用户div列表input团队team计划det
3条回答

一个简单的list理解将产生一个新的list,没有不需要的元素:

print(*[team for team in atl_div if team != input_team], sep="\n")

这使得一个新的list临时包含除input_team之外的所有元素。*将其解压为print的顺序位置参数,sep="\n"告诉print在打印时在每个元素之间放置一个换行符。如果要从list中永久删除有问题的元素,可以执行以下操作:

atl_div.remove(input_team)
print(*atl_div, sep="\n")

请注意,如果没有完全匹配input_team的条目,remove将在不存在匹配元素的情况下引发异常,并且如果list中有多个值实例,它将只删除一个副本。list理解将默默地删除该值的所有副本,并且不关心是否有任何副本可以开始。你知道吗

两种简单的方法:

最简单的方法是一个接一个地浏览列表,并打印任何一个不是您显式希望不要选择的字符串。你知道吗

for team in atl_div:
    if input_team != team:
        print(team)

一种可以说是更具python风格的方法来做同样的事情,虽然效率不高(对于这样一个小列表来说,效率没有那么重要),但是你可以做一个列表理解,然后做一个类似的列表。这样,你就可以列一个新的名单,而这个名单上没有你要找的团队。你知道吗

included_teams = [x for x in atl_div if x != input_team]

然后可以逐个元素打印出该列表:

for team in included_teams:
    print(included_teams)

这可以简化为同一问题的以下版本,也许可读性稍差一些:

for team in [x for x in atl_div if x != input_team]:
    print(team)

在这两种解决方案中,您都可以更宽容一些,并将.upper()之类的字符串转换应用到input_team以允许它,这样输入buf的用户仍然可以获得预期的列表BOS, DET, FLA。你知道吗

对于第一个答案,可以这样做:

for team in atl_div:
    if input_team.upper() != team:
        print(team)
input_team = input('Enter a team abbrev.:')
print('\n'.join([team for team in atl_div if team != input_team]))

编辑:更新的打印格式

相关问题 更多 >