Python 实现数组相减示例

作者:执假以为真 时间:2021-08-19 07:01:52 

问题描述:

有2个数组如下


a = [3,3,3,4,4,4,5,6,7]
b = [3,3,4,4]

第1题:从数组a中删除所有在数组b中出现过的元素。对于上例来说,a删除结束应该等于 [5, 6, 7].

第2题:实现 c = a - b , c应该等于[3, 4, 5, 6, 7].

先看第1题:

常规的思维大致会这么写代码:


for i in a:
if i in b:
 a.remove(i)

这么写是错误的,如果在for循环外面加一句打印语句,则会发现a变成了一个奇怪的数组: [3, 4, 4, 5, 6, 7]

删倒也删了几个,但是又没有删除干净。(原因后面会讲)

那么,第1题的正确的做法是什么呢?

其实正确的做法很简洁。如下:


a = [i for i in a if i not in b]

再看第2题:

在公布第2题的答案之前,首先我们要弄清楚,为什么本文最初的一段代码是错的?原因就是,当做了a.remove(i)之后,遍历数组的游标会继续右移,然而此时因为已经remove过一个元素了,所以,游标应该保持原位置不动,而不是继续右移。知道了这个原理之后,我们就有办法来写 a - b 了:


import copy

c = copy.deepcopy(a)
while len(b) > 0:
if b[0] in c:
 c.remove(b[0])
 b.remove(b[0])
else:
 print("Error: b is not a sub set of a")
 break

print(c) # c = a - b

来源:https://blog.csdn.net/nirendao/article/details/79436061

标签:Python,数组,相减
0
投稿

猜你喜欢

  • 浅谈慢SQL优化之索引的作用

    2024-01-24 20:31:54
  • Python版中国省市经纬度

    2021-05-10 20:25:12
  • 向数据库中插入数据并返回当前插入的行数及全局变量@@IDENTITY应用

    2024-01-13 05:11:00
  • Python参数解析模块sys、getopt、argparse使用与对比分析

    2021-12-19 17:39:58
  • Mysql误删数据解决方案及kill语句原理

    2024-01-26 20:22:15
  • 3个适合新手练习的python小游戏

    2023-08-02 02:12:27
  • Golang实现字符串倒序的几种解决方案

    2024-01-30 20:01:37
  • Python OpenCV招商银行信用卡卡号识别的方法

    2022-01-16 06:31:30
  • 详解CentOS升级Python2.6到Python2.7并安装pip

    2023-06-13 18:59:45
  • js is_valid_filename验证文件名的函数

    2024-04-23 09:12:05
  • 简单谈谈MySQL优化利器-慢查询

    2024-01-28 02:30:33
  • JavaScript中随机数方法 Math.random()

    2024-04-10 13:56:30
  • VMWare 虚拟机Centos7安装Oracle数据库的教程图解

    2024-01-13 22:00:24
  • 在TABLE中模仿excel的单元格移动

    2007-12-22 12:03:00
  • Python 实现图像特效中的油画效果

    2021-04-10 18:29:49
  • 你们要的Python绘画3D太阳系详细代码

    2021-05-12 09:32:48
  • 基于Python编写一个刷题练习系统

    2022-10-01 13:28:34
  • 详解如何用Python实现感知器算法

    2023-11-02 13:32:20
  • Pandas替换及部分替换(replace)实现流程详解

    2023-11-04 02:58:38
  • Python Serial串口基本操作(收发数据)

    2022-04-17 09:54:07
  • asp之家 网络编程 m.aspxhome.com