1

私は次のようなリストを持っています

furniture = [desk, Lamp, Chair, shelf]

それらのいくつかは、理由のために大文字になっています。このリストの値は変更される可能性がありますが、私は言うことができるようにしたいと思います。

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

ただし、一方が他方ではない場合、xがそのリストに存在しない場合はlist.remove(x)の結果であるため、エラーが発生します。この問題を回避するにはどうすればよいですか?

キャピタライゼーションを使用するか、1つのリストで2つの可能性のいずれかを削除します。

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 に答える