Merge and intersect lists without using sets.
Using sets for these operations is dangerous because sets cannot contain certain object types (such as lists) and their iteration order is undefined. Fixes #7596
This commit is contained in:
parent
188ab7b952
commit
f892cc798c
1 changed files with 10 additions and 12 deletions
|
@ -1003,21 +1003,19 @@ def is_list_of_strings(items):
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _listify(a):
|
|
||||||
if not isinstance(a, (list, tuple)):
|
|
||||||
return [a,]
|
|
||||||
else:
|
|
||||||
return a
|
|
||||||
|
|
||||||
def list_union(a, b):
|
def list_union(a, b):
|
||||||
set_a = set(_listify(a))
|
result = list(a)
|
||||||
set_b = set(_listify(b))
|
for i in b:
|
||||||
return list(set_a.union(set_b))
|
if i not in result:
|
||||||
|
result.append(i)
|
||||||
|
return result
|
||||||
|
|
||||||
def list_intersection(a, b):
|
def list_intersection(a, b):
|
||||||
set_a = set(_listify(a))
|
result = []
|
||||||
set_b = set(_listify(b))
|
for i in a:
|
||||||
return list(set_a.intersection(set_b))
|
if i in b:
|
||||||
|
result.append(i)
|
||||||
|
return result
|
||||||
|
|
||||||
def safe_eval(expr, locals={}, include_exceptions=False):
|
def safe_eval(expr, locals={}, include_exceptions=False):
|
||||||
'''
|
'''
|
||||||
|
|
Loading…
Reference in a new issue