从列表Python中删除两个可能值中的一个

时间:2013-01-13 19:53:32

标签: python list

我有一个列表,例如

furniture = [desk, Lamp, Chair, shelf]

其中一些资本化是有原因的。此列表的值可能会发生变化,但我希望能够说:

furniture.remove(chair) or furniture.remove(Chair)

但是如果它是一个而不是另一个,它会引发错误,因为它是list.remove(x)的结果,如果该列表中不存在x。我该如何绕过这个问题?

使用大写,或删除单个列表中的两种可能之一。

3 个答案:

答案 0 :(得分:3)

这样的事情会起作用吗?请注意,它会创建一个新列表,而不是修改原始列表:

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']

答案 1 :(得分:2)

我使用tryexcept

try:
   furniture.remove('chair')
except ValueError:
   furniture.remove('Chair')

答案 2 :(得分:0)

if chair in furniture:
    furniture.remove(chair)
if Chair in furniture:
    furniture.remove(Chair)