我喜欢用重复的组件组合双列表。这是python代码
importTb= [[1],[1,3],[1,2],[5,7]]
期望输出Tc=[[1,2,3],[5,7]]
for i in range(len(Tb)):
print(i)
for a in Tb[i]:
for j in range(len(Tb)):
if a in Tb[j]:
print('yes')
Tc.append(list(set(Tb[i]).union(set(Tb[j]))))
if len(Tb[i]) >= len(Tb[j]):
Tb.pop(j)
elif len(Tb[i])<=len(Tb[j]):
Tb.pop(i)
print(Tb)
print('#'*20)
print(Tc)
list index out of range error.
如果在遍历列表时删除了列表中的项,则for循环最终将尝试访问超出列表大小的项。
最好使用while循环进行就地删除,这样你就可以根据你的项操作来控制索引的进程。
Tb= [[1],[1,3],[1,2],[5,7]]
i = 1
while i<len(Tb):
if set(Tb[i]).isdisjoint(Tb[i-1]):
i += 1
else:
Tb[i-1] = sorted({*Tb[i],*Tb.pop(i-1)})
print(Tb)
[[1, 2, 3], [5, 7]]
除非您的列表非常大,否则您应该考虑使用合并的子列表创建第二个列表,并且根本不用担心索引进度:
Tb = [[1],[1,3],[1,2],[5,7]]
Tb2 = Tb[:1]
for t in Tb[1:]:
if set(t).isdisjoint(Tb2[-1]):
Tb2.append(t)
else:
Tb2[-1] = sorted({*t,*Tb2[-1]})
print(Tb2)
[[1, 2, 3], [5, 7]]