将字符串与元组列表匹配

Posted

技术标签:

【中文标题】将字符串与元组列表匹配【英文标题】:matching a string to a list of tuples 【发布时间】:2014-01-09 01:17:42 【问题描述】:

大家好,我在 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)。 只有五个数字的原因是“中断”。因为 if 语句是肯定的,所以它停止了 for 循环。这避免了遍历下一个 if 语句。如果 'break' 行被删除,它将改为:[1, 0, 0, 4, 0, 0] 【参考方案1】:
>>> [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]

【讨论】:

以上是关于将字符串与元组列表匹配的主要内容,如果未能解决你的问题,请参考以下文章

列表与元组

列表与元组的基本操作

列表与元组

Python其实很简单 第九章 列表与元组(一)

Python学习3:列表与元组

Python教学课程分享3-列表与元组详解