使用set(list).difference和条件语句引发异常

时间:2020-01-10 11:43:38

标签: python-3.x

我有两个列表:

'pages' > ID, page_ID, picture, page_num;

我想确保list1至少包含list2的所有元素(顺序无关紧要)。如果没有,我想提出一个例外。

List1 = [A,B,C,D,E,F,G,H]
list2 = [A,B,C,D]

无论如何打印set = set(list2).difference(List1) if set != "": raise Exception('Missing required columns',set) 变量都返回:set。我不确定如何解释。我希望输入一个空字符串。我如何建立对此的条件陈述?我觉得我做的不正确。

5 个答案:

答案 0 :(得分:1)

您可以尝试:

>>> l1 = list('ABCABDDCB')
>>> l1
['A', 'B', 'C', 'A', 'B', 'D', 'D', 'C', 'B']
>>> l2 = list('ABCD')
>>> l2
['A', 'B', 'C', 'D']
>>> set(l1) == set(l2)
True

>>> l2 = list('ABCDE')
>>> l2
['A', 'B', 'C', 'D', 'E']
>>> set(l1) == set(l2)
False

>>> if not set(l1) == set(l2):
...     raise Exception('Missing required columns',set)
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
Exception: ('Missing required columns', <class 'set'>)
>>>

答案 1 :(得分:1)

您可以使用all函数:

if not all(e in List1 for e in List2):
    raise Exception('Missing required columns {}'.format(set(list2).difference(List1)))

any函数:

if any(e not in List1 for e in List2):
    raise Exception('Missing required columns {}'.format(set(list2).difference(List1)))

答案 2 :(得分:1)

逻辑有两个问题。

  1. 您正在将set分配给set.difference的结果。这可能是不可取的。

  2. 您正在将set(由set.difference返回)与str"")进行比较,因此逻辑将始终引发Exception。

  3. p>

也许尝试:

diffset = set(list2).difference(List1)
if diffset:
    raise Exception(f'Missing required columns {diffset}')

答案 3 :(得分:1)

您检查了错误的数据类型。 set.difference()返回set,而不是str。因此,在您的if语句中,您必须检查一个空集(set())或使用len(set)检查它的长度。但是,有一件事-避免使用全局范围内已经存在的名称来命名变量/函数(例如内置的set)。可能有问题。

答案 4 :(得分:0)

尝试这样:

if not (set(list2) <= set(List1)):
    raise Exception('Missing required columns',set)