我有一个嵌套列表:
[['spam', 'eggs'],
['spam', 'eggs', '111'],
['spam', 'eggs', 'foo'],
['spam', 'eggs', '111', 'bar'],
['spam', 'eggs', 'foo', 'bar']]
我需要的是一种获取较短子列表索引的算法,其中所有元素都包含在较长的子列表中。在此示例中,算法应返回:
[0, 1, 2]
任何帮助将不胜感激!
答案 0 :(得分:1)
您可以将每个子列表转换为一个集合,并使用有用的issubset
方法。如果您需要保留列表中的重复元素,则不将会起作用。
x = [set(i) for i in x]
x = [i
for i, e in enumerate(x)
if any(e.issubset(j) and i != k
for k, j in enumerate(x))
]
# [0, 1, 2]
答案 1 :(得分:1)
一种方法可能是在同一个列表中使用双for
循环,并在不.issubset
时与index
一起检查:
my_list = [['spam', 'eggs'],
['spam', 'eggs', '111'],
['spam', 'eggs', 'foo'],
['spam', 'eggs', '111', 'bar'],
['spam', 'eggs', 'foo', 'bar']]
indexes = []
for index1, item1 in enumerate(my_list):
for index2, item2 in enumerate(my_list):
if index1 != index2:
if set(item1).issubset(item2):
indexes.append(index1)
break
print(indexes)
结果:
[0, 1, 2]
答案 2 :(得分:1)
out_index = [i for i in range(len(my_list))
if any(set(my_list[i]) < m
for m in [set(j) for j in my_list])]