我有一个清单,例如
furniture = [desk, Lamp, Chair, shelf]
其中一些被大写是有原因的。此列表的值可能会发生变化,但我想说:
furniture.remove(chair) or furniture.remove(Chair)
但是,如果它是一个而不是另一个,它应该会产生一个错误,因为如果 x 不存在于该列表中,那是 list.remove(x) 的结果。我怎样才能绕过这个问题?
要么使用大写,要么删除单个列表中的两种可能性之一。
像这样的东西会起作用吗?请注意,它会创建一个新列表,而不是修改您的原始列表:
In [4]: furniture = ['desk', 'Lamp', 'Chair', 'shelf']
In [5]: [item for item in furniture if item.lower() != 'chair']
Out[5]: ['desk', 'Lamp', 'shelf']
或与capitalize
:
In [6]: [item for item in furniture if item.capitalize() != 'Chair']
Out[6]: ['desk', 'Lamp', 'shelf']
但是正如@mgilson 指出的那样,这将删除列表中的所有匹配项,而不仅仅是第一个。他的答案更清晰,但这是一种完全荒谬/不必要的方式,您可以只删除第一场比赛:
def first(l, value):
new_l = [item for item in enumerate(l) if item[1].lower() == value]
if new_l:
return min(new_l)[1]
return
# Original list
furniture = ['desk', 'Lamp', 'chair', 'shelf', 'chair', 'chair', 'Chair', 'Chair']
print 'Original:', furniture
for word in ('chair', 'dogs'):
f = first(furniture, word)
if f:
furniture.remove(f)
print 'Removing:', word, furniture
输出:
Original: ['desk', 'Lamp', 'chair', 'shelf', 'chair', 'chair', 'Chair', 'Chair']
Removing: chair ['desk', 'Lamp', 'shelf', 'chair', 'chair', 'Chair', 'Chair']
Removing: dogs ['desk', 'Lamp', 'shelf', 'chair', 'chair', 'Chair', 'Chair']
我会使用try
和except
:
try:
furniture.remove('chair')
except ValueError:
furniture.remove('Chair')
if chair in furniture:
furniture.remove(chair)
if Chair in furniture:
furniture.remove(Chair)