关闭

Python小技巧:判断一个列表是否包含另一个列表的全部元素

发表于:2023-9-25 09:07

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:测试玩家勇哥    来源:测试玩家勇哥

  你应该遇到过需要判断一个列表是否包含另一个列表的全部元素的场景吧。这种需求在实际工作中非常常见,比如在数据筛选、列表匹配以及集合操作等。下面勇哥给大家分享三个日常使用到的小技巧。
  方法一:使用all函数和生成器表达式
  例如从一个大的数据列表中选取满足特定条件的子集。勇哥举个例子:我们需要从一个商品列表中筛选出库存充足的商品:
  def contains(list1, list2):
      return all(item in list1 for item in list2)
  # 筛选库存充足的商品
  product_list = [{'name': 'Apple', 'stock': 10}, {'name': 'Banana', 'stock': 5}, {'name': 'Orange', 'stock': 8}]
  required_products = ['Apple', 'Banana']
  if contains([product['name'] for product in product_list], required_products):
      print("有库存")
  else:
      print("有库存不足的商品")
  # 输出 :有库存
  方法二:使用set函数和集合运算
  对两个集合进行操作,例如求并集、交集或差集,这种也是很实用且常用。再举个栗子:判断用户的兴趣爱好是否与某个活动的标签相匹配:
  # 1. 内置函数
  def contains(list1, list2):
      return set(list2).issubset(set(list1))
  # 2. 操作符
  def contains2(list1, list2):
      return set(list2) <= set(list1)
  user_interests = ['篮球', '游泳', '登山', '音乐']
  event_tags = ['篮球', '足球', '音乐']
  if contains(user_interests, event_tags):
      print("完全匹配")
  else:
      print("不完全匹配")
  if contains2(user_interests, event_tags):
      print("完全匹配")
  else:
      print("不完全匹配")
  # 输出: 不完全匹配
  方法三:嵌套循环
  有时候会遇到一些特殊的场景,比如:需要自定义复杂的条件判断逻辑来判断列表之间的关系,这时候用上面两种方法不太方便,我们就可以遇事不决先循环一波试试了。最后一个栗子:判断两个任务列表的优先级是否一致:
  def list_contains(List1, List2):
      if len(List1) != len(List2):
          return False
      for task1, task2 in zip(List1, List2):
          if task1['priority'] != task2['priority']:
              return False
      return True
  tasks_1 = [{'name': 'Task 1', 'priority': 1}, {'name': 'Task 2', 'priority': 2}]
  tasks_2 = [{'name': 'Task 3', 'priority': 1}, {'name': 'Task 4', 'priority': 2}]
  if list_contains(tasks_1, tasks_2):
      print("两个任务列表的优先级一致")
  else:
      print("两个任务列表的优先级不一致")
  # 输出:优先级一致
  以上就是勇哥分享的三种简单实用的处理数据的思路及示例代码,当然如果小伙伴们遇到嵌套比较深可能需要全比对的数据或者更复杂的数据要处理的时候,就可以自由的扩展方法或者另辟蹊径了。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号