3

文字列のリストがあります

["oranges", "POTATOES", "Pencils", "PAper"]

paper大文字と小文字を区別せずに、リストにが含まれているかどうかを確認したい。次のコードスニペットが出力されるようにしますfound。私のリストには、英語のアルファベット(大文字と小文字)のみで構成される単純な文字列のみが含まれています。

item = 'paper'
stuff = ["oranges", "POTATOES", "Pencils", "PAper"]
if item in stuff:
    print "found"
else:
   print "Not found"

#How do I get the method to print "found"?

明確化:

私のリストは実際にはリストのリストであり、私のロジックは次の構成を使用しています。

if not any ( item in x for x in stuff):
   print "Not found"
else:
   print "found"
4

5 に答える 5

16

私はと組み合わせるだろlowerany:

>>> stuff = ["oranges", "POTATOES", "Pencils", "PAper"]
>>> any(s.lower() == 'paper' for s in stuff)
True
>>> any(s.lower() == 'paperclip' for s in stuff)
False

これは、(listcomp とは異なり) 見つかるとすぐに短絡して検索を停止します。OTOH、複数の検索を行う場合は、listcomp を使用してリスト全体を 1 回下げることもできます。

あなたの更新されたケース(誰も興味のある質問をするのではなく、代わりに別の質問をするのはなぜですか?)、私はおそらく次のようにします

>>> any("book" in (s.lower() for s in x) for x in stuff)
True
>>> any("paper" in (s.lower() for s in x) for x in stuff)
True
>>> any("stuff" in (s.lower() for s in x) for x in stuff)
False

ただし、同じルールが適用されます。複数の検索を行っている場合は、リストのリストを一度正規化したほうがよいでしょう。

于 2012-12-10T21:17:25.230 に答える
3

リスト内包表記を使用して、リストを小文字に変換できます。

if item in [x.lower() for x in stuff]:
    print "found"
else:
    print "not found"

stuff = ["oranges", "POTATOES", "Pencils", "Paper"]
print [x.lower() for x in stuff]
['oranges', 'potatoes', 'pencils', 'paper']

于 2012-12-10T21:16:49.880 に答える
1

両方の文字列を大文字または小文字に変換して比較しますか?

item = 'paper'
stuff = ["oranges", "POTATOES", "Pencils", "PAper"]
if item.upper() in map(lambda x: x.upper(), stuff):
    print "found"
else:
    print "Not found"

エクストラ:次に、この行を使用します

if not any ( item.upper() in map(lambda y: y.upper(), x) for x in stuff):
于 2012-12-10T21:16:37.190 に答える
1

Pythonバフではなく、一般的にプログラミングは初めてですが、まあ、これが私の解決策です:

私はあなたの一般的なアプローチに近づこうとしましたが、関数内にコードをカプセル化することを検討したいかもしれません.

あなたの経験のレベルについてはわかりませんので、あなたが既に知っていることを投稿していることをご容赦ください。

関数に関する一般的な情報: ウィキペディア

関数に関する Python ドキュメント: Python ドキュメント

最初の解決策は、冗長ですが、これに慣れていない人にとってはより理解しやすいものです。

def item_finder_a(item, stuff):
    new_array = []
    for w in stuff:
        new_array.append(w.lower())
    if item in new_array:
        print "found"
    else:
       print "Not found"

item_finder(word,array_of_words)

そして、少し短いより簡潔なバージョン

def item_finder_b(item, stuff):
    if item in map(str.lower,stuff):
        print "found"
    else:
       print "Not found"

item_finder_b(word,array_of_words)

お役に立てれば

乾杯

于 2012-12-10T21:52:00.853 に答える
0

現在持っているものを使用する代わりに、lower関数を使用できます。

for strings in stuff:
  if strings.lower() == item:
    print "found"

print "Not found"
于 2012-12-10T21:13:33.717 に答える