有一个先前选择的图边列表:my_root = [(4, 5), (1, 2), (2, 3), (7, 8] 有一个新的候选添加到根:new_item = (3 , 4) 需要建立最大链,以new_item为基础,你应该得到:
my_root =[(1, 2), (2, 3), (3, 4), (4, 5)]
对于解决方案,我使用了代码:
path = [new_item]
for _ in range(len(my_root)):
left_item = path[0]
right_item = path[-1]
path.append(next(filter(lambda x: right_item[1] == x[0], my_root)))
path.insert(0, next(filter(lambda x: left_item[0] == x[1], my_root)))
当 filter(lambda x: right_item[1] == x[0], my_root) 什么都不返回时会发生错误。用python风格解决这个问题的最佳方法是什么?
next 运算符将返回的值而不是 StopIteration 作为其第二个参数。您可以在列表中写入一些不是边缘的空值(无,无)。然后从路径中删除所有此类边缘。
但这远非解决问题本身最有效的方法。您不应该使用 for 循环,其中并非所有迭代都很重要。