[英]Get a constrained list of unique elements from a list of lists
我必须使用Python解决此优化问题。 我有一个列表列表,每个列表包含元素。 例如:
l = [
['elem1'],
['elem2'],
['elem3','elem4'],
['elem4','elem5']
]
我需要获得的是一个列表r
:
1)两个列表的长度应相同
>>> len(r)==len(l)
True
2)每个选定的元素应对应于同一索引列表的元素
>>> correct=True
>>> for r_element in r:
... if r_element not in l[r.index(r_element)]:
... correct=False
... break
...
>>> correct
True
3)元素应该是唯一的
>>> len(r) > len(set(r))
False
例如,此处可能的结果是:
r = ['elem1','elem2','elem3','elem4']
有没有最好的方法可以做到这一点? 还是不使用列表,而是使用其他一些数据结构或某些特定的Python包?
谢谢
这是一种使用递归回溯进行选择和回溯(如果它们不起作用)的方法。 如果没有列表可以满足约束,则该函数以字符串形式返回失败。
l = [
['elem1', 'elem5'],
['elem2'],
['elem3','elem4'],
['elem1','elem2']
]
def constrained_list(l):
r = [] # final list
used = set() # values used
if recurse(r, used, l): return r # if successul in finding contrained list, return it
return "No valid list"
def recurse(r, used, l):
if not l: return True # base case, l has been completely processed
line = l[0] # look at first line in l
for word in line:
if word not in used:
used.add(word)
r.append(word) # try adding this word
if recurse(r, used, l[1:]): return True # recurse on the rest of l, from 1 to end
used.remove(word) # if this choice didnt work, backtrack.
r.pop()
return False
输出:
['elem5', 'elem2', 'elem3', 'elem1']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.