2

私はPythonを初めて使用し、誰かがこれを手伝ってくれるかどうか疑問に思っていました。bの要素がaにあるかどうかを確認しようとしています。これが私の試みです。現在、出力がありません。どんな助けでもありがたいです、ありがとう!

a = [1]
b = [1,2,3,4,5,6,7]

for each in b:
    if each not in a == True:
        print(each + "is not in a")
4

8 に答える 8

4

あなたは2つの異なることをテストしていて、結果はFalseです。Pythonは演算子をチェーンし、次の場合に効果的にテストします(each is in a) and (a == True)

>>> 'a' in ['a'] == True
False
>>> ('a' in ['a']) and (['a'] == True)
False
>>> ('a' in ['a']) == True
True

Trueとにかく、ifステートメントでテストする必要はありません。

if each not in a:

十分です。

于 2012-09-17T17:26:20.713 に答える
2

あなたはただ言うことができるはずです:

if each not in a:
   print ("%d is not in a" % each)

実際の式は、演算子チェーンを使用しています。

if a > b > c:

次のように解析します:

if (a > b) and (b > c):

Pythonで。これは、式が実際に次のように解析されていることを意味します。

if (each not in a) and (a == True):

ただし、a == True常にが返さFalseれるため、ifブロックは実行されません。

于 2012-09-17T17:26:32.070 に答える
1
a = [1,2,3]
b = [1,2,3,4,5,6,7]
c = [7,8,9]

print set(a) <= set(b) #all elements of a are in b
print set(c) <= set(b) #all elements of c are in b
于 2012-09-17T17:28:49.947 に答える
1

BとAの違いを見たほうがいい

 set(b).difference(set(a))
于 2012-09-17T17:31:43.227 に答える
0

別の方法:

for bb in b:
    try:
        a.index(bb)
    except:
        print 'value is not in the list: ' + str(bb)
于 2012-09-17T17:45:59.300 に答える
0

==True は必要ありません。Just: if each not in a:

于 2012-09-17T17:28:02.147 に答える
0

これは、セットを使用して非常に簡単です:

a = [1]
b = [1, 2]

only_in_b = set(b) - set(a)
# set([2])
于 2012-09-17T17:31:05.167 に答える
0

2つのリストが大きい場合は、それを追加したいと思います. これは最善の方法ではありません。アルゴリズムは O(n^2) です。最良の方法は、要素をキーとしてディクショナリに追加して、a をトラバースすることです。その後、2 番目のリストをトラバースし、要素が既に辞書にあるかどうかを確認します。代わりに、これは O(n) アルゴリズムです。

于 2012-09-17T18:40:46.060 に答える