正在检查同一列表中不断增长的嵌套列表中是否存在项



我有一个n大小的列表,每个n上都有列表和非列表。例如,如果n=为不同的值,那么该列表上的项目可能看起来像:

possible_sub_combinations[3455] = [(A, B), (A, C), "A", "B"]
possible_sub_combinations[3499] = [(A, G), (B, C), "F", "H"]
possible_sub_combinations[6589] = [(B, C), (A, C), "A", "B", "C"]
possible_sub_combinations[9872] = [(A, F), "A", "F", (A, D), "E", (F, H), "G"]

我想根据内部列表项(即(A,B(&(A、C(在同一列表中,但单独列出而不在另一列表中。我的possible_sub_combinations列表的大小可能会增加,所以有些列表的内部列表只有3个或20个。

因此,例如OK列表将为:

[(A, B), (A, C), "A", "B", "C"]

因为在两个内部列表(A,B(和(A,C(中,你可以自己找到相同的字母。

NOT OK列表为:

[(A, B), (A, E), "A", "B", "C"]

由于(A;E〃;它本身不在这个名单上。

到目前为止我尝试过的:

for mainsubset in possible_sub_combinations:
for individuals in mainsubset:
if isinstance(individuals, tuple):  #Here I check if the component is a tuple or an individual    
effect1 = individuals[0] #I assign the 1st letter of the inner list
effect2 = individuals[1] #second letter of the inner list
flag1 = False
flag2 = False
for comparison_individuals in mainsubset: #Loop the value looking for matches on non-list components
if not isinstance(comparison_individuals, tuple):
if effect1 == comparison_individuals:
flag1 = True
if effect2 == comparison_individuals:
flag2 = True
if flag1 & flag2:
hierarchical_combinations.append(mainsubset)

这种方法适用于只有1个内部列表的列表,但我无法使其适用于超过1个的列表。我想我已经很接近了,但我只花了8个小时试图让它发挥作用,我已经没有想法了,而且已经失去了方向。

另外,请友善一点。我正在学习Python,我可能犯了一个新手错误。但我们非常感谢任何帮助。

将元组中的字符串和solo中的字符串提取到集合中。然后检查这些差值是否为空。

for mainsubset in possible_sub_combinations:
tuples = set(sum(x for x in mainsubset if isinstance(x, tuple), ()))
strings = set(x for x in mainsubset if isinstance(x, str))
if tuples - strings:
hierarchical_combinations.append(mainsubset)

您可以使用all:

def is_ok(d):
return all(all(j in d for j in i) for i in d if isinstance(i, tuple))
vals = [[('A', 'B'), ('A', 'C'), 'A', 'B', 'C'], [('A', 'B'), ('A', 'E'), 'A', 'B', 'C'], [('A', 'B'), ('A', 'C'), 'A', 'B'], [('A', 'G'), ('B', 'C'), 'F', 'H'], [('B', 'C'), ('A', 'C'), 'A', 'B', 'C'], [('A', 'F'), 'A', 'F', ('A', 'D'), 'E', ('F', 'H'), 'G']]
result = ['ok' if is_ok(i) else 'not ok' for i in vals]

输出:

['ok', 'not ok', 'not ok', 'not ok', 'ok', 'not ok']

最新更新