2016-06-18 5 views
1

"in"メソッドを使用せずにリスト内のアイテムを検索しようとしています。ループを使ってやろうとしました。コードは正常に実行されましたが、両方の結果が集計されました(見つかった項目と見つからなかった項目)。 break文を使って修正しようとしました。どういうわけか、それは働いた。しかし、期待どおりの結果を得られない。"in"メソッドを使用しないでリスト内のアイテムを見つける方法?

python3.2で書かれたコードは次のとおりです。 -

list=[] 
item="" 
while item!='DONE': 
    item=input("Enter the number, To discontinue enter 'DONE': ") 

    if item.isdigit(): 
     item=int(item) 
     list.append(item) 
    else: 
     list.append(item) 

del list[-1] 
print("The list is: ",list) 

num=int(input("Enter the number you want to search in list: ")) 
def search(list,num): 
    for i in range(len(list)): 
     if list[i]==num: 
      print("Item found") 
      break 
     else: 
      print("Not found") 
    return 
search(list,num) 

私は「整数」と同様に「文字列」タイプの要素の両方を検索し、それを修正することができる方法を提案してください。私のコードは、整数型の要素に対してうまくいきます。

+4

は、なぜあなたは 'in'を使用したくありませんか? – DeepSpace

+0

私は別のオプションを探しています。これはPythonの学習段階です。 –

+0

'list.index(element)'はリスト内で見つかった最初の要素のインデックスを返し、それ以外の場合は 'ValueError'を返します。それはあなたが探しているものですか? –

答えて

1

あなたがこれを行うときintに文字列を変換しようとしている:

num = int(input("Enter the number you want to search in list: ")) 

入力が数字でない場合は、これは例外をスローします。

代わりに、isdigit()を使用してコードの最初の部分で行ったのと同じことをやってみませんか?数字の場合はintにキャストし、数字でない場合は文字列のままにしてください。その後、あなたのコードは数字以外のものに対しても機能するはずです。また


num = input("Enter the number you want to search in list: ") if num.isdigit(): num = int(num) 

、第2の解決策は、あなたのコードの第一又は第二の部分のいずれかにintに何をキャストしないだろう。だから、文字列としてすべてを維持する、換言すれば、すなわち

while item != 'DONE': 
    item = input("Enter the number, To discontinue enter 'DONE': ") 
    list.append(item) 

... 

num = input("Enter the number you want to search in list: ") 
+0

ここでタイプを確認する必要はありません。 –

+0

@AmritanshuVermaそしてそれは動作しましたか? – leekaiinthesky

+0

@leekaiintheskyいいえ、それはできませんでした...私はこのコードを試しましたが、整数のために働いていませんでした。私がここで逃しているものを知りませんか? DEF :-list = [12,45,63、 "ASD"、458,1、 "SDR"、104] プリント(リスト) 項目=入力( "あなたはリストで検索したい項目を入力します")検索(リスト、アイテム): 私のための範囲内(LEN(リスト)): かのリスト[i]を==項目:( "アイテム発見") 印刷 ブレーク他 : プリント( "見つかりません") リターン 検索(リスト、アイテム) –

0

整数や文字列を区別する必要は本当にありません - 彼らは、Pythonはあなたがやりたいと同じように扱うことができ、両方のちょうどですこの場合はです。その事実を考えると、あなたは(あなたがロジックを簡素化し、より標準的な方法であなたのコードを整理するために使用できるいくつかの他の技術が含ま - PEP 8 - Style Guide for Python Codeを参照)、次のラインに沿って、あなたのコードを書き換えることができます:

def search(a_list, value): 
    for item in a_list: # note: no need to use an index to iterate a list 
     if item == value: 
      print("Value found") 
      break 
    else: # only executes if loop finishes without break 
     print("Value not found") 

my_list = [] # note: avoid using the names of built-ins like "list" 
while True: 
    value = input("Enter an value, to discontinue enter 'DONE': ") 
    if value == 'DONE': 
     break 
    my_list.append(value) 

print("The list is: ", my_list) 

value = int(input("Enter the value you want to search for in the list: ")) 
search(my_list, value) 
0

これがあるので、学習の練習では、私はinを避けて検索として提出します。他の人はそれが汚い腐ったチートだと主張するでしょう。どうして?

def search(inlist, item): 
    print(item, end="") 
    if inlist.__contains__(item): 
     print(" found") 
    else: 
     print(" not found") 

mylist = [] 
item = None 
while item != 'DONE': 
    item = input("Enter the number, To discontinue enter 'DONE': ") 
    mylist.append(item) 

while True: 
    num = input("Enter the item you want to search for: ") 
    search(mylist, num) 

。 。

また、学習の精神の中で、ここではセットを使用するソリューションです。セットを使用していればリストを作成することはまずありませんが、そのリストは他の場所から来たものと見なしましょう。

ここで重要な点は、大きなリストと非常に多数の検索があった場合、セットを使用するほうがおそらくリストを反復するよりも速いということです。

def search(inset, item): 
    print(item, end="") 

    if inset & set((item,)): 
     print(" found") 
    else: 
     print(" not found") 

mylist = [] 
item = None 
while item != 'DONE': 
    item = input("Enter the number, To discontinue enter 'DONE': ") 
    mylist.append(item) 

myset = set(mylist) 
while True: 
    num = input("Enter the item you want to search for: ") 
    search(myset, num) 
0

用途:

def seach(l, elm): 
    try: 
     l.index(elm) 
     print "found" 
    except: 
     print "not found" 

それはカスタムループより方法よりニシキヘビです。

PS:あなたがあなたの学習段階にあるとおり、タスクを実行する方法を見つけるためにしようとしないでください。そのために 'in'キーワードが作られています。

関連する問題