将一个字符串与元组列表进行匹配

3

大家好,我有一个Python问题。 我想使用之前函数的两个返回值来创建一个新列表。 我想要检查元素列表中的每个元素,看看它是否是至少一个二元组中的第一个条目。 如果是,将相应的数字附加到“向量”列表中。 如果该元素不出现在二元组列表中,则我会附加一个“0”。

例如: 使用以下这两个列表:

duple_list=[('C', 1), ('H', 4)]

element_list=['C', 'H', 'N']

应返回类似于向量的内容:
[1, 4, 0]

我的当前代码返回了这个结果:

[1, 0, 4, 0, 0]

当前代码:

for element in element_list:
    for duple in duple_list:
           if element==duple[0]:
              vector.append(duple[1])
              break
          if element!=duple[0]:
              vector.append(0)
return vector

我知道我的代码为什么不起作用,但我不知道应该使用哪个工具/需要做些什么不同的事情。

我不明白你的向量中为什么只有5个数字,与你当前代码的版本相比。难道不应该有6个数字吗?(双列表中的2个 * 元素列表中的3个)。 - Theox
1
只有五个数字的原因是因为有了'break'语句。 它停止了for循环,因为if语句是肯定的。 这样可以避免执行下一个if语句。 如果删除了'break'语句,结果将变成: [1, 0, 0, 4, 0, 0] - user3121989
1个回答

4
>>> [dict(duple_list).get(e, 0) for e in element_list]
[1, 4, 0]

不使用列表推导式的步骤。从元组列表创建dict

>>> duple_dict = dict(duple_list)
>>> duple_dict
{'H': 4, 'C': 1}

遍历 element_list 中的每个元素,检查是否包含在 duple_dict 中:

>>> vector = []
>>> for element in element_list:
       if element in dict(duple_dict):
           vector.append(duple_dict[element])
       else:
           vector.append(0)

>>> vector
[1, 4, 0]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接