1

我有一个清单,例如

furniture = [desk, Lamp, Chair, shelf]

其中一些被大写是有原因的。此列表的值可能会发生变化,但我想说:

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

但是,如果它是一个而不是另一个,它应该会产生一个错误,因为如果 x 不存在于该列表中,那是 list.remove(x) 的结果。我怎样才能绕过这个问题?

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

4

3 回答 3

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']
于 2013-01-13T19:58:28.540 回答
2

我会使用tryexcept

try:
   furniture.remove('chair')
except ValueError:
   furniture.remove('Chair')
于 2013-01-13T20:00:47.337 回答
0
if chair in furniture:
    furniture.remove(chair)
if Chair in furniture:
    furniture.remove(Chair)
于 2013-01-13T19:57:21.233 回答