You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从图元组输入提取边集:Python程序问题问询

嘿,我来帮你排查下这个Python程序的问题,一眼看下来有两个关键的逻辑错误,咱们一步步拆解:

问题分析

1. 遍历对象完全错了

你写的for i in G[1]是在遍历输入列表G的第二个元素(也就是({'a', 'c'}, 6)这个元组),而不是遍历整个G列表。这就导致你的循环只会处理这个元组里的两个值:边集合{'a','c'}和权重6,直接把其他所有边的数据都忽略了,这肯定不是你想要的。

2. 集合不能用下标访问

Python里的set(集合)是无序且不支持下标操作的,当你尝试执行i[0]时,如果i是一个集合(比如{'a','b'}),会直接抛出TypeError: 'set' object is not subscriptable的错误。而且从你的输入结构来看,每个元组的第一个元素本身就是你需要的边集合,根本不需要去取什么索引。

另外,当循环到权重数字(比如6)时,执行i[0]同样会报错,因为整数也没有下标属性。

修复后的代码

我们只需要修正这两个问题:遍历整个G列表,直接提取每个元组的第一个元素(也就是边集合):

def edges(G):
    E = []
    # 遍历整个输入列表,每个item是(边集合, 权重)的元组
    for edge_item in G:
        # 直接取元组的第一个元素,就是我们要的边集合
        E.append(edge_item[0])
    return E

# 测试你的输入
G = [({'a', 'b'}, 4), ({'a', 'c'}, 6), ({'a', 'd'}, 8), ({'b', 'e'}, 1) , ({'b', 'f'}, 9), ({'c', 'f'}, 3), ({'d', 'g'}, 7), ({'d', 'h'}, 0)]
print(edges(G))
运行结果

修复后运行代码,就能得到完整的边集合列表了:

[{'a', 'b'}, {'a', 'c'}, {'a', 'd'}, {'b', 'e'}, {'b', 'f'}, {'c', 'f'}, {'d', 'g'}, {'d', 'h'}]
可选的简洁写法

如果想让代码更精炼,可以用Python的列表推导式一行搞定,效果完全一样:

def edges(G):
    return [item[0] for item in G]

这样既清晰又高效,完美解决你的需求~

内容的提问来源于stack exchange,提问作者user9713961

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:21:18