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

您正在测试两种不同的东西,结果是 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

无论如何,您永远不需要测试Trueif 语句:

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):

在蟒蛇。这意味着您的表达式实际上被解析为:

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

你不需要 ==True。只是:如果每个都不在一个:

于 2012-09-17T17:28:02.147 回答
0

使用sets真的很容易:

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

only_in_b = set(b) - set(a)
# set([2])
于 2012-09-17T17:31:05.167 回答
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

如果这两个列表很大,我想补充一点。这不是最好的方法。你的算法是 O(n^2)。最好的方法是遍历a,将元素作为键添加到字典中。然后,遍历第二个列表,检查元素是否已经在字典中,这是一个 O(n) 算法。

于 2012-09-17T18:40:46.060 回答