如何检查Python中另一个元素列表中的一个元素是否等于“ n”?

时间:2020-05-02 20:29:43

标签: python

我才刚开始使用Python,并且很难用if语句来解决问题。

说我有以下两个列表:

one = [{'id': '2'}, {'id': 3}]
two = [{'id': '4'}, {'id': 5}]

我想遍历one并将id的{​​{1}}与one进行比较。基本上,我想查找的是两个列表是否共享具有相同值的two。在此示例中,我的代码应返回id,因为2不同于4和5,3不同于4和5。

基本上,我想做的是:检查Not found是否等于2中的任何id,如果不相等,则打印一些内容,然后与two相同。用伪代码是这样的:如果3中没有id等于two中的2,则打印一些内容。然后与3相同,依此类推。

我尝试了以下操作:

for x in one:
  for y in two:
    if x['id'] != y['id']:
      print('Not found')

此代码的问题是它将返回四个Not found,因为它正在比较每个元素。相反,我只想检查2中是否有3two

1 个答案:

答案 0 :(得分:1)

请注意,您的代码中似乎有错误,您在第一个ID中使用字符串,而在第二个ID中使用整数。

有几种方法可以检查python中的交集。 Here's an article讨论了几种不同的方法。我喜欢使用set()类型,因为它具有一个有用的内置方法,称为intersection。集合与列表有点不同,因为它们不能包含重复项,并且会自动排序。

例如,如果您有一个包含1和2的集合,即set1 = set([1,2]),则可以使用set1.intersection([2])来检查2是否在该集合中。

这是在您的情况下(所有键均为整数)我将如何实现此类功能的方法:

one = [{'id': 2}, {'id': 3}]
two = [{'id': 4}, {'id': 5}]

def flatten(list_of_dicts):
    return [item['id'] for item in list_of_dicts]

intersecting_ids = set(flatten(one)).intersection(flatten(two))