匹配2集或列表或字典,如果他们共享相同的变量Python

时间:2016-03-18 09:24:42

标签: python python-3.x

我想知道list1list2是否有相同的对象,如果list1list2中没有相同的对象,我会在那里做一些事情然后我会做其他事情。

我在这里尝试做的是使用if语句如下但是失败,无论list1在list2中是否有相同的对象,编码仍在运行

c = "abc"
a={"abc","dsw","ccc","ddd"}
b={"abc","123"}  
if b.issubset(a):
    do something
else:
    do something

我想比较内部变量中的任何一个是相同的,还是重复的。

或者无论如何要比较c with set like b or a

如果两个集合完全相同,

子集或超集将仅输出为True,我想检查集合中的一个或多个变量是相同还是重复,而不是必须全部相同。

4 个答案:

答案 0 :(得分:3)

主要原因是因为您已导入from numpy import *。因此,当您调用该方法时,您实际上正在调用numpy's all method

从它的官方文件:

  

返回:

     
all : ndarray, bool
         
      

除非指定out,否则返回一个新的布尔值或数组,在这种情况下返回对out的引用。

    
  

numpy's all的返回类型是一个boollen数组。

<强>代码:

from numpy import *
list1={"abc","dsw","ccc","ddd"}
list2={"abc"}  
print [a for a in all(x i list2 for x in list1)]

<强>输出:

[False, True, False, False]

因此,当您检查if all(x in list2 for x in list1):它被简化为if [False, True, False, False]时,您的程序始终为true,因为数组不为空。

更清楚if all(x in list2 for x in list1) >> if [False, True, False, False] >> true

答案 1 :(得分:2)

由于list1和list 2是集合,你可以这样做:

print('Yes' if list2.issubset(list1) else 'No')

答案 2 :(得分:2)

你使用套装;甚至不需要使用all

>>> a = {"abc","dsw","ccc","ddd"}
>>> b = {"abc"}

您想知道a中的所有元素是否也在b中。这意味着:ab的一部分:

>>> a.issubset(b)
False
>>> b.issubset(a)
True
>>> a.issubset(a)  # is a subset of itself as well = have same elements
True

请注意issubset已经过优化,如果bset 元素少于a,那么它可以直接使用返回False;你的方法不能。

答案 3 :(得分:1)

如果list1和list2是set,你将这样做(python 2.7):

print True if list1 & list2 else False