python - 合并表示基于公共值的图边的元组列表
问题描述
我正在尝试编写一些 python 代码,如果给定一个表示图上的有向边的元组列表,我将返回所有可能的路径。在这种情况下,图将不包含循环,并且图的每个节点只能连接到另一个节点。输入将采用以下形式
[(1909, 1910), (1910, 1900), (1922, 1920), (1935,1922), (1940, 1939)]
并且应该以以下形式返回一些东西
[(1909,1910,1900), (1935,1922,1920), (1940,1939)]
我不知道如何解决这个问题,因为必须保持顺序,即因为 1922 在 1920 之前,而 1935 在 1922 之前,所以结果答案必须是 (1935,1922,1920)
关于如何实现这一目标的任何想法?
解决方案
您可以将元组转换为以第一项为键的字典,然后通过链接每个项的最后一个元素来逐步合并这些项。
tuples = [(1909, 1910), (1910, 1900), (1922, 1920), (1935,1922), (1940, 1939)]
links = { a:[b] for a,b in tuples }
while True:
toMerge = [(a,bs[-1]) for a,bs in links.items() if bs[-1] in links]
for a,b in toMerge:
links[a].append(b)
del links[b]
else: break
result = [ [a,*bs] for a,bs in links.items() ]
print(result)
# [[1909, 1910, 1910], [1935, 1922, 1922], [1940, 1939]]
推荐阅读
- magento - 有没有办法可以设置显示折扣前的价格但没有增值税?magento 2
- python - Apache beam read csv file and groupbykey
- javascript - 如何更改material-ui的默认背景颜色
- reactjs - Conditionally add attributes to components
- c# - Set signal value using .NET from Visual studio in CANoe
- node.js - Filter nested result inside a nested object with elasticsearch
- ruby-on-rails - rails 4,嵌套`accepts_nested_attributes_for`模型的ActiveModel::ForbiddenAttributesError
- autotools - 测试二进制文件创建了临时包装器
- css - 浮动 div 没有并排出现
- json - Blob 的流分析作业不会关闭我的 json 数组