python如何二删除二维或者三维数组/列表中某维的空元素

如题,个人在使用python进行数据预处理过程中出现的问题,抽象成删除三维列表中某维为空的问题。

一.首先来看一下三维数组/列表的结构

仔细看下图就会很清楚了:

轴0即是去除第一个外括号后第一层(我把它称做第一维)有四大块;

对轴1则是对每一块来说,去掉大块的括号后的四小横条(我把它称作第二维);

对轴2则是对每一条来说,去掉小条的括号后的每一个数(从外往里数第三层括号,我就叫做第三维)

二.代码

1.删除二维数组中为空的元素则比较简单:

oldlist=[[1, 1, 1, 1, 1],  [1, 1, 1, 1, 2],  [2, 2, 2, 2, 4, 4], [ 8, 8, 8, 8, 8],  [16, 16], [], [] , []]
newlist=[x for x in oldlist if x] #删除空列表[]print(newlist)

结果如下:

[[1, 1, 1, 1, 1],  [1, 1, 1, 1, 2],  [2, 2, 2, 2, 4, 4], [ 8, 8, 8, 8, 8],  [16, 16]]

2.(延伸)对三维数组

代码中我们用的三维数组如下:

[ [[1, 1, 1, 1, 1], [2, 2, 2, 2, 4, 4], [8, 8, 8, 8, 8], [16, 16], [], []],
  [[111], [333], [444]],
  [],
  []  ]

其中第一维和第二维都设置了为空的元素

删除三维列表中第二维为空的元素,代码如下:

#1.删除三维列表中第二维为空的元素
oldlist=[[[1, 1, 1, 1, 1],  [2, 2, 2, 2, 4, 4], [ 8, 8, 8, 8, 8],  [16, 16], [], []],  [[111], [333], [444]],[],[]]
new1=[]
new2=[]
def dellist(oldlist):
    for sam in oldlist:
        new1 = []
        for x in sam:
            if x:
                new1.append(x)
        new2.append(new1)
    return new2

print(dellist(oldlist))

结果如下:

[ [[1, 1, 1, 1, 1], [2, 2, 2, 2, 4, 4], [8, 8, 8, 8, 8], [16, 16]], [[111], [333], [444]], [], []]

若要想把第一维也为空的元素耶删除,加上一行即可:

oldlist=[[[1, 1, 1, 1, 1],  [2, 2, 2, 2, 4, 4], [ 8, 8, 8, 8, 8],  [16, 16], [], []],  [[111],[333],[444]],[],[]]
new1=[]
new2=[]
def dellist(oldlist):
    for sam in oldlist:
        if sam:
            new1 = []
            for x in sam:
                if x:
                    new1.append(x)
            new2.append(new1)
    return new2

print(dellist(oldlist))

结果如下:

[  [[1, 1, 1, 1, 1], [2, 2, 2, 2, 4, 4], [8, 8, 8, 8, 8], [16, 16]],    [[111], [333], [444]]  ]

原文地址:https://www.cnblogs.com/yh-blog/p/10588208.html

时间: 2024-10-14 05:50:30

python如何二删除二维或者三维数组/列表中某维的空元素的相关文章

C语言malloc函数为一维,二维,三维数组分配空间

c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区.可以根据需要,向系统申请所取空间的大小,因为没有在声明部分定义它们为变量或数组,所以不能通过变量名或数组的方式去引用这些数据,只能通过指针来引用. 对内存的动态分配是通过系统提供的库函数来实现的,主要有malloc,calloc,free,realloc这四个函数. 接下来写一下malloc函数如何实现为一维,二维,三维数

python 判断两个列表中相同和不同的元素

背景: 在做接口自动化时,通常会判断接口返回中的数据信息,与数据库中返回的数据信息是否一致,比如:将接口返回信息的用户姓名存放到一个列表中,将数据库返回的用户姓名存放到另一个列表中,这时需要判断两个列表是否一致,如果不一致,将不同的元素信息分别回写到excel文件中,可以一目了然的看出哪些信息返回的不正确. 下列代码中直接存放列表信息,比较如下: 1 #接口返回值 2 list1 = ['张三', '李四', '王五', '老二'] 3 #数据库返回值 4 list2 = ['张三', '李四'

Python学习笔记总结(二)函数和模块

一.函数 函数的作用:可以计算出一个返回值,最大化代码重用,最小化代码冗余,流程的分解. 1.函数相关的语句和表达式 语句        例子 Calls        myfunc(‘diege','eggs',meat=‘lit’) #使用函数 def,return,yield      def adder(a,b=1,*c):                        return a+b+c[0] global        changer():                 gl

python之数据类型(二)

python数据类型之列表 列表是以方括号"[]"保卫的数据集合,不同成员以","分割.列表中可以包含任意数据类型,也可以包含其他列表,列表可以通过序号访问其中成员.在脚本中可以对列表进行排序.添加.删除等操作,可以改变列表中任意成员的值 常用的列表操作 列表操作 描述 list.append 追加成员 list.count(x) 计算列表中的参数X出现的次数 list.extend(L) 向列表中追加另外一个列表L list.index(x) 获得参数X在列表中的

Python学习之路二

今天主要学习了列表,python的列表真的事太强大了,由于内容比较多,今天就先简单的介绍一下新学的几个成员函数吧. 首先我们要了解list是一种序列类型,其构造方式有四种形式: (1)空列表 [] (2)直接添加元素 [a] [a,b,c] (3)使用列表解析 [x for x in iterable] (4)使用构造函数 list() or list(iterable) 成员函数: append() 在末尾添加一个元素 extend() 以列表的形式在末尾添加 insert() 两个参数,第一

Python习题集(十二)

每天一习题,提升Python不是问题!!有更简洁的写法请评论告知我! https://www.cnblogs.com/poloyy/category/1676599.html 题目 请写一个函数find_odd,参数是1个列表,请返回该列表中出现奇数次的元素 比如 find_odd([1, 1, 2, -2, 5, 2, 4, 4, -1, -2, 5]) ? -1 find_odd([20, 1, 1, 2, 2, 3, 3, 5, 5, 4, 20, 4, 5]) ? 5 find_odd(

Python代码实现删除一个list里面的重复元素

方法一:是利用map的fromkeys来自动过滤重复值,map是基于hash的,大数组的时候应该会比排序快点吧 方法二:是用set(),set是定义集合的,无序,非重复 方法三:是排序后,倒着扫描,遇到已有的元素删之 ============================================================ #!/usr/bin/python#coding=utf-8'''Created on 2012-2-22Q: 给定一个列表,去掉其重复的元素,并输出'''de

python(6)——循环删除list、深拷贝和浅拷贝

 列表的内存自动管理功能,在删除列表中的元素时,python会自动对列表内存进行收缩,并移动列表中的元素以保证元素之间没有间隙,所以使用       "循环+remove()方法"来删除列表中元素时会出现元素错位 #删除list1中的奇数 ist1=[1,1,1,2,3,4,5] for i in list1: if i%2!=0: list1.remove(i) print(list1) #[1,2,4] 若要正确循环删list中的元素,定义两个相同的list.一个list用于循环,

读书笔记--《Python基础教程第二版》--第2章列表和元组

第二章 列表和元组 2.1 序列的概览 序列:每个元素被分配一个序号  6种:列表.元组.字符串.Unicode字符串.buffer对象.xrange对象         序列可以嵌套序列          python容器的概念:序列.字典.集合 2.2 通用序列的操作 索引.分片.加.乘.属于.长度,最大值.最小值.迭代 2.2.1 索引 >>> greeting='Hello' >>> greeting[0] 'H' >>> greeting[-