Python中实现对list做减法操作介绍

yipeiwu_com6年前Python基础

问题描述:假设我有这样两个list,

          一个是list1,list1 = [1, 2, 3, 4, 5]
          一个是list2,list2 = [1, 4, 5]
          我们如何得到一个新的list,list3,
          list3中包括所有不在list2中出现的list1中的元素。
          即:list3 = list1 – list2
         
解决方案:我们可以用set(集合)操作
          list3 = list(set(list1) – set(list2))
         
          set操作会将一个list转换成一个集合。
          假设:list_t = [1, 2, 3, 1]
          那么:list(set(list_t)) = [1, 2, 3]
          是的,重复的项会被删除。

其他方案:list3 = [i for i in list1 if i not in list2]       #可用于list分片
          这样写也很直观。
          但是在list很大的时候,没有set方法快。

额外知识:a = [[i,j] for i in range(2) for j in range(3)]
          这个和“其他方案”非常相似,
          都是在[]里面进行判断和计算。
          感觉很方便,至少比下面这样要方便、要快:
          a = []
          for i in range(2):
              for j in range(3):
                  a.append([i,j])

某些问题:如果list_tmp = [[1,2],[2,3]]
          即list里面不是单独的元素组成,而是list,
          那么set(list_tmp)会出问题。

还要研究:hash函数

相关文章

Python可变和不可变、类的私有属性实例分析

本文实例讲述了Python可变和不可变、类的私有属性。分享给大家供大家参考,具体如下: 可变和不可变 items = [] print(id(list)) items.append(...

python对视频画框标记后保存的方法

需要画框取消注释rectangle import cv2 import os,sys,shutil import numpy as np # Open the input mov...

用Python编写一个基于终端的实现翻译的脚本

为什么写这个程序,为什么不给这个程序配备gui?原因很简单,因为我是一个命令行控,Linux习惯了不习惯了鼠标,总觉得点着不如敲命令快,各位在看这篇文章就说明和本人有相同的爱好....

PyQt5每天必学之QSplitter实现窗口分隔

QSplitter使用户可以通过拖动子面板的边界控制子面板的大小。在我们的例子中,我们使用了两个QSplitter 对三个QFrame 控件进行了分隔。 #!/usr/bin/pyt...

Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)

Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)

从最简单的Web浏览器的登录界面开始,登录界面如下: 进行Web页面自动化测试,对页面上的元素进行定位和操作是核心。而操作又是以定位为前提的,因此,对页面元素的定位是进行自动化测试的基...