使用列表和元组列表列出理解

时间:2016-08-06 02:59:22

标签: python list tuples list-comprehension

在我的Python 2.7.5代码中,我有以下数据结构:

一个简单的清单......

>>> data["parts"]
['com', 'google', 'www']

...以及元组列表......

>>> data["glue"]
[(1L, 'com'), (3L, 'google')]

当输入存在这些结构的代码时,我将始终知道data["parts"]中的内容; data["glue"]充其量,将包含“匹配”元组与data["parts"]中的内容 - 最差情况data["glue"]可以为空。我需要知道的是胶水中缺少的部分。因此,通过上面的示例数据,我需要知道'www'缺失,这意味着它不在data["glue"]中可能存在的任何元组中。

我首先尝试通过各种for循环和if语句生成缺失部分的列表,但最好是非常混乱。我尝试过列表推导并且失败了。也许列表理解不是解决这个问题的方法。

非常感谢您的帮助,谢谢。

2 个答案:

答案 0 :(得分:4)

您可以使用set difference操作。

formData: Array<FormData>

或仅使用list comprehensions

print set(data['parts'])-set(i[1] for i in data['glue'])
>>> set(['www'])

设置操作在速度部门中胜出,运行 10,000,000次,我们可以看到列表理解接管 16s

print [i for i in data['parts'] if i not in (j[1] for j in data['glue'])]
>>> ['www']

答案 1 :(得分:0)

您可以在此处使用列表推导。也许最简单的方法是创建一组所有索引,然后返回缺少的索引。请注意,即使零件数组中有重复项,此答案也会为您提供所有缺少的组件(例如,如果“www”部分出现两次)。这不是set comprehension的情况。

# set of 0-based indices extracted from the 1-based tuples
indices = set(glue_tuple[0] - 1 for glue_tuple in data['glue'])

# array of missing parts, in order
missing_parts = [part for i, part in enumerate(data["parts"]) if i not in indices]