2017-06-06 11 views
0

私はPythonプログラミングには新しく、リストの値を比較する際には本当に助けが必要です。リストを反復して文字列を比較することができませんpython

私は2つのリスト(飲み物、食品)を持っています。私は2つのリストを比較しません。私がしようとしているのは、リスト内のすべての値を単独で比較することです。

まず、ドリンクリストのすべての値を最初にforループとif-elseステートメントを使って比較しなければなりません。飲み物にマッチがある場合、私は食品リストのために別のループを行い、if-elseステートメントを使用して食品リストの値を比較します。

これらは私のコードです:

drinks = [] 
food = [] 

drinks.append("lemontea") 
drinks.append("coke") 
drinks.append("sprite") 
drinks.append("orangejuice") 
drinks.append("fantagrape") 

food.append("nugget") 
food.append("pizza") 
food.append("chickenwing") 
food.append("fries") 
food.append("pizza") 

for i in drinks: 
    if i == drinks: 
     for j in food: 
      if j == food: 
       print("fail") 
    else: 
     print("success") 

私の問題は、私がピザである食品リストに同じアイテムを持っているように、私が「失敗」の出力を取得することになっていますということです。また、なぜ私は5つの成功出力を得ているのか分からない。

これは私が得た私の出力です:

success 
success 
success 
success 
success 

任意の助けが与えられた場合、私には理解されます。ありがとうございました。

更新: 返信ありがとうございますが、人々は私の質問と混同しているようですので、より多くの情報を提供しています。

リスト内の各アイテムを比較する理由は、アイテムがランダムに生成され、リストに追加される文字列タイプであるためです。たとえば、最初に生成される項目は「00100ABC」です。したがって、重複した値/リストがある場合は、エラーメッセージを表示する必要があります。ここで

+0

あなたが間違っていることは間違いなくあなたの状態です: 'もしi ==飲み物:'が正しくない。飲み物の価値をリストと照らし合わせてチェックしています。あなたは最終的に文字列をあなたの平等のリストと比較していますが、必ずあなたのelse caseに当てはまります。 – idjaw

+0

'if i == drinks'は、各文字がアルファベット全体であるかどうかを示すようなものです。 –

+0

また、なぜあなたはそのようなネストされたリストを持っている必要があるのあなたのロジックで接続していないよ。また、ループロジックで正確に何を達成しようとしていますか?それは私には分かりません。 – idjaw

答えて

0
#So you have 
#drinks = ['lemontea', 'coke', 'sprite', 'orangejuice', 'fantagrape'] 
#food = ['nugget', 'pizza', 'chickenwing', 'fries', 'pizza'] 

for i in drinks: 
    if i == drinks: 
     for j in food: 
      if j == food: 
       print("fail") 
    else: 
     print("success") 

反復1

i = 'lemontea' 
if i == drinks: 

あなたは評価しているドリンクがリストオブジェクトであると私は文字列オブジェクトである 、「私は飲み物を==」ん。 iとドリンクは同等ではないため(値が異なる別のオブジェクト) ifステートメントはFalseと評価され、 は成功を表示するelseステートメントを実行します。

反復2

i = 'coke' 
if i == drinks 

ここでも、あなたはFalseでリストオブジェクトドリンク、 を持つ文字列オブジェクトのコークス」を評価しています。この同じ条件はすべての条件に適用されます。あなたがする必要がどのような

は動作しません。今、この等価の使用インデックス

for i in range(0, len(drinks)): 
    if drinks[i] == food[i]:   #compare index for index 
     print('Matching index') 
    else: 
     print('Index does not match') 

のための同一の位置を比較すること

eg. 
drinks[0] = 'lemontea' 
drinks[1] = 'coke' 
drinks[2] = 'sprite' 
ect... 
food[0] = 'nugget' 
food[1] = 'pizza' 
food[2] = 'chickenwing' 

インデックスで動作するようにコードを変更であるかの指標の中のアイテム両方のリストでorderdされていないので、両方のリストでナゲットがインデックス2にない可能性があります。オーダーの用途に関係なく両方のリストにアイテムが含まれているかどうかを確認するには

for item in food: #eg item 0 = 'lemontea' 
    if item in food and item in drinks: 
     print(item, 'is in both lists') 
    else: 
     print(item, 'does not occur in both lists') 


編集

for x in food: 
    while food.count(x) > 1: #breaks loops when only occurrence left. 
     print("There are", food.count(x), 'occurrence of', x, 'in food') 
     food.pop(x) 
     print("deleted one occurrence") 

このループは、複数出現するループ内の各アイテムをテストし、一つを除く全てを削除します。

代替クリーナーメソッド。 - 定義によって重複を削除するので、セットを使用します。

unique_in_food = list(set(food)) #sets remove all duplicates by definition 

now if you want unique items across multiples lists 

unique_in_both = list((set(food) | set(drinks)) 
# set(a) | set(b) finds the union between two sets 
+0

お返事ありがとう。しかし、あなたの説明は食べ物と飲み物の両方のリストを一緒に比較することだと思われました。私は飲み物リストと食べ物リストを比較しようとしていない。何をしようとしているのは、飲み物のリストをそれ自体で比較し、それから食べ物のリストをそれ自身で比較することです。 – DanielWinser

+0

なぜあなたはそのリストを自分と比較しようとしていますか?あなたはそれをどのように使用するかの例を挙げることができますか? – Rosh

+0

実際のアイテムを投稿することはできませんが、アイテムがランダムに生成され、リストに追加されていることがわかります。しかし、私はアイテムが同じでないことを確認する必要があります。したがって、私はリストの各項目を比較しなければならず、重複がある場合はエラーメッセージを出す必要があります。 – DanielWinser

0

あなたがpizza値を確認したい場合は、ちょうどこのように行う必要がある、食品リストにか存在します。

def insertValue2List(list, value): 
    if value not in list: 
     list.append(value) 
    else: 
     print("fail") 

drinks = [] 
food = [] 

insertValue2List(food, "nugget") 
insertValue2List(food, "pizza") 
insertValue2List(food, "chickenwing") 
insertValue2List(food, "fries") 
insertValue2List(food, "pizza") 

出力は次のとおりです。

fail 

あなただけの場合リストの重複値を削除するには、サンプルコードを使用します。

print(list(set(food))) 

出力は、次のとおりです。ユニークな

['pizza', 'nugget', 'chickenwing', 'fries'] 
+0

こんにちは、返信ありがとうございます。他の値、例えばナゲットをチェックしますか?チキン、フライドポテト、またはピザの価値だけ? – DanielWinser

+0

'set()'要素は一意でなければなりません。重複するリスト要素が直接削除される場合は、一意でなければなりません。 – saul

0

これは成功と失敗に印刷しても、重複を削除...

drinks = [] 
food = [] 

food.append("nugget") 
food.append("pizza") 
food.append("chickenwing") 
food.append("fries") 
food.append("pizza")  

# let's add some duplicates… 
drinks.append("lemontea") 
drinks.append("fantagrape") 
drinks.append("fantagrape") 
drinks.append("coke") 
drinks.append("orangejuice") 
drinks.append("sprite") 
drinks.append("fantagrape") 
drinks.append("lemontea") 
drinks.append("fantagrape") 
drinks.append("sprite") 
drinks.append("sprite") 
drinks.append("orangejuice") 
drinks.append("orangejuice") 
drinks.append("coke") 
drinks.append("coke") 

food.append("chickenwing") 
food.append("nugget") 
food.append("pizza") 
food.append("fries") 
food.append("chickenwing") 
food.append("nugget") 
food.append("fries") 
food.append("pizza")  

for drink in drinks: 
    occurences = [index for index, value in enumerate(drinks) if value == drink] 
    if len(occurences) > 1: # if duplicates occur 
    print('fail: {}'.format(drink)) 
    occurences.pop() # keep one occurence 
    [drinks.remove(drink) for o in occurences] # remove the rest 
    else: 
    print('success: {}'.format(drink)) 

for meal in food: 
    occurences = [index for index, value in enumerate(food) if value == meal] 
    if len(occurences) > 1: # if duplicates occur 
    print('fail: {}'.format(meal)) 
    occurences.pop() # keep one occurence 
    [food.remove(meal) for o in occurences] # remove the rest 
    else: 
    print('success: {}'.format(meal)) 

print(drinks) 
print(food) 
+0

ありがとうございます、もし私が食品リストのための別のループを追加したいのであればどうですか? – DanielWinser

+0

@DanielWinserはドリンクループのフードループ部分ですか、それとも別のループを持つフードループですか? –

+0

別のループにあります – DanielWinser

0
あなたが一意性をチェックするように設定を使用し、交差することができ

drinks = [] 
food = [] 

drinks.append("lemontea") 
drinks.append("coke") 
drinks.append("sprite") 
drinks.append("orangejuice") 
drinks.append("fantagrape") 

food.append("nugget") 
food.append("pizza") 
food.append("chickenwing") 
food.append("fries") 
food.append("pizza") 

success = True 

if len(set(food)) != len(food): 
    print('fail: duplicate entry in food') 
    success = False 
if len(set(drinks)) != len(drinks): 
    print('fail: duplicate entry in drinks') 
    success = False 
両方のリストで

if set(food) & set(drinks): # if the intersection of both sets is not empty 
    print('fail: entry in both food and drinks') 
    success = False 

成功!

if success: 
    print('success') 
関連する問題