我有两个列表:
'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
。我不确定如何解释。我希望输入一个空字符串。我如何建立对此的条件陈述?我觉得我做的不正确。
答案 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)
逻辑有两个问题。
您正在将set
分配给set.difference
的结果。这可能是不可取的。
您正在将set
(由set.difference
返回)与str
(""
)进行比较,因此逻辑将始终引发Exception。
也许尝试:
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)