打印列表中的所有字符串元素,除了 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])

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

我不得不承认我是一个新手程序员,所以如果我的问题听起来是这样,我深表歉意。我们都从某个地方开始:)

感谢您的任何帮助,如有必要,请随时询问更多详细信息!

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

编辑:更新了打印格式

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

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

这使得一个新的list临时包含除等于input_team之外的所有元素。*将其解压缩为顺序位置参数以printsep="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)

如果你想使用熊猫,你可以这样做:

import pandas as pd
aa = pd.Series(["BOS", "BUF", "DET", "FLA"]) 
aa[aa != 'BOS'].tolist()
# ['BUF', 'DET', 'FLA']

最新更新