所以我正在制作一个随机安排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
之外的所有元素。*
将其解压缩为顺序位置参数以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)
如果你想使用熊猫,你可以这样做:
import pandas as pd
aa = pd.Series(["BOS", "BUF", "DET", "FLA"])
aa[aa != 'BOS'].tolist()
# ['BUF', 'DET', 'FLA']