元组与列表的有效比较

时间:2017-08-23 15:12:01

标签: python loops iterator tuples list-comparison

我有一个元组列表,其中每个元组都包含xyz坐标的字符串表示。我需要将元组的第一个和第二个值与字典中的另一组值进行比较(以确定元组中的第一个项是否为起点或终点)

tuple_list = [('0.1, 0.5, 2.0', '3.0, 5.0, 6.0'), ('0.0, 0.6, 2.0', '4.0, 5.0, 6.0')]

vertex_dict = {'0': '3.0, 5.0, 6.0', '1': '0.0, 0.6, 2.0'}

如果元组中的第一项与顶点列表匹配,我想表明它是" start"点,而元组中的第二项是" end"点。

目前,我正在使用以下代码完成此操作:

pt_line_dict = {}
for key, value in vertex_dict:
    for i, j in tuple_list:
        if i == value:
            pt_line_dict[key] = (i, j)
        elif j == value:
            pt_line_dict[key] = (j, i)
        else:
            pass

Output:
pt_line_dict = {'0': ('3.0, 5.0, 6.0', '0.1, 0.5, 2.0'), '1': ('0.0, 0.6, 2.0', '4.0, 5.0, 6.0')}

元组之间不可能有重复值,顶点字典也是唯一的(没有重复键值)。

是否有更有效的方法可以避免循环遍历元组列表中的所有值?我认为发电机可能是这样做的一种方式......

1 个答案:

答案 0 :(得分:0)

根据"元组之间没有重复值的可能性,并且顶点字典也是唯一的" ,你需要一种更有效的方法来实现这一点避免循环遍历元组列表中的所有值 - 我只能建议避免冗余内循环迭代的解决方案:

pt_line_dict = {}

for k,v in vertex_dict.items():
    for t in tuple_list:
        if v in t:
            idx = t.index(v)
            pt_line_dict[k] = (t[idx], t[int(not idx)])
            break

print(pt_line_dict)

输出:

{'0': ('3.0, 5.0, 6.0', '0.1, 0.5, 2.0'), '1': ('0.0, 0.6, 2.0', '4.0, 5.0, 6.0')}