python列表元素按条件分组_Python列表元素分组
知乎上有人问 Python中的列表按相同元素分割?
比如列表[0,0,0,1,1,2,3,3,3,2,3,3,0,0]分割成[0,0,0],[1,1],[2],[3,3,3],[2],[3,3],[0,0]
如何解决这样的问题呢?
1、首先说明,如果这样的题目都不能写出代码,原因在基本的循环判断没有搞清楚。
2、黄哥在如何训练自己的编程思路 文章所说的,做习题,要像开发项目的流程一样
(需求->需求分析->设计->编码->测试->交付等),
拿到一个习题,还没有进行分析,就匆匆忙忙敲代码,
这个学习方法,是不好的学习方法。
3、如果做这个习题,看黄哥的讲解,先要分析,分析看出是按照相邻元素是不是相同来分组。
设计解决方法,大问题化解为小问题,先化解为找出元素不相同的那个元素的索引,有这个索引后,再进行分组。
4、编码
2019年 3月11 黄哥修改,修改为时间复杂度为O(n)
代码一:
# coding:utf-8
def group_by_element(lst):
'''by 黄哥 基本思路是先取得不同元素起始的索引值,
再按照这个索引值取切片
'''
index = []
result = []
for i, _ in enumerate(lst):
if i < len(lst) - 1 and lst[i + 1] != lst[i]:
index.append(i + 1)
result.append(lst[:index[0]])
for i, item in enumerate(index):
if i < len(index) - 1:
result.append(lst[index[i]:index[i + 1]])
result.append(lst[item:])
return result
if __name__ == '__main__':
lst = [0, 0, 0, 1, 1, 2, 3, 3, 3, 2, 3, 3, 0, 0]
group = group_by_element(lst)
print group
代码二:
# coding:utf-8
def group_by_element(lst):
'''by 黄哥 基本思路是先取得不同元素起始的索引值,
再按照这个索引值,用生成器分组。
'''
index = []
for i, _ in enumerate(lst):
if i < len(lst) - 1 and lst[i + 1] != lst[i]:
index.append(i + 1)
def take(lst, n):
for i in range(n):
yield next(lst)
if not hasattr(lst, 'next'):
lst = iter(lst)
begin = 0
for item in index:
x = list(take(lst, item - begin ))
begin = item
yield x
yield list(lst)
if __name__ == '__main__':
lst = [0, 0, 0, 1, 1, 2, 3, 3, 3, 2, 3, 3, 0, 0]
group = group_by_element(lst)
print list(group)
思路三:
基本思路用一个二维list [[]], 遍历list,判断前后元素是不是相等,如果相等添加到result[-1],
如果不相等,需要添加一个空[]。
# coding:utf-8
def group_by_element(lst):
'''by 黄哥 基本思路用一个二维list [[]], 遍历list
判断前后元素是不是相等,如果相等添加到result[-1],如果
不相等,需要添加一个空[]
'''
result = [[]]
length = len(lst)
for i in range(length):
if i < length - 1:
if lst[i] == lst[i + 1]:
result[-1].append(lst[i])
else:
result[-1].append(lst[i])
result.append([])
result[-1].append(lst[i])
return result
if __name__ == '__main__':
lst = [0, 0, 0, 1, 1, 2, 3, 3, 3, 2, 3, 3, 0, 0]
group = group_by_element(lst)
print group
python列表元素按条件分组_Python列表元素分组相关推荐
- python列表元素零的移动_python列表多行
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 这个列表推导式共有145列: memberdef_list = and std: ...
- python删除列表元素的所有方法_python 列表删除所有指定元素的方法
python 列表删除所有指定元素的方法 如下所示: a = [1,1,1,2,3,45,1,2,1] a.remove(1) result: [1,1,2,3,45,1,2,1] while 1 i ...
- python列表元素下标是什么_python列表中元素插入位置总结
python列表中元素插入位置总结 , python中列表去掉最后一个元素 ist.insert(index,obj) 列表与方法之间用点号相隔,括号内需要添入的参数分别是索引和要插入的元素. 要完成 ...
- python列表的排序方法是_Python列表排序 reverse、sort、sorted 操作方法详解
python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...
- python列表推导式生成随机数_python列表推导式
列表推导式介绍 列表推导式是Python中快速创建列表的一种方式. 之前我们要创建(Python3中)一个元素是0-9的列表,我们可能会像下面这么写: >>> list(range( ...
- python里元组和列表的共同点和不同点_Python列表和元组的相同点和不同点是什么...
相同点:属于有序序列.可以强制转换.使用len()统计元素个数.使用count()统计指定元素的出现次数.不同点:1.元组类型为tuple,列表类型为list:2.元组不能修改,列表可以根据索引来修改 ...
- python列表中包含元祖_python列表与元祖
python 的列表和元素: 共同点:有序的 区别:1.列表可以修改增加删除列表内容,元组不能修改 联系:元组中包含列表的元素,可以修改列表元素. 分析:1.列表:LIST1=[1,2,3,4,5,6 ...
- python列表使用技巧与方法_Python列表的相关操作与方法
Python列表的相关操作与方法 1.列表 why:int.bool.str存在缺陷 str:存储少量的数据:所有的操作获取的内容都是 str类型,存储的数据类型单一. what: 列表可以承载任意数 ...
- python将列表的第一列删除_python列表基本操作:索引(访问),切片,扩展,删除,追加,统计,长度,获取下标等...
List(列表) 列表,是一种用于保存一系列有序项目的集合,在 Python 中你需要在它们之间加上一个逗号 注意:列表是可变数据类型 列表的基本操作有:索引(访问),切片,扩展,删除,追加,统计,长 ...
- python元组和列表都支持的方法_python列表方法和元组
Python列表方法 1.append()在列表末尾追加新对象 >>> lst=[1,2,3] >>> lst [1, 2, 3] >>> lst ...
最新文章
- 【水】JSOI完美的对称
- 浅析面包屑导航对网站SEO优化有哪些作用?
- 源码剖析Django REST framework的认证方式及自定义认证
- iOS之深入解析WKWebView加载的生命周期与代理方法
- TensorFlow基础笔记(5) VGGnet_test
- Jest 测试框架 beforeEach 的设计原理解析
- mysql内存机制_MySQL内存管理机制
- React:Conditional Rendering(条件渲染)
- EZEMC测试软件_四种常见的EMC仿真软件介绍
- Stardict 81部中文词典下载
- 干货:如何打造一个直播平台
- wordpress 安全保密hacks
- 全返模式是怎样玩的?解析购盈利模式
- 模拟网上手机抽奖界面(供大家BS......)
- php 多个curl 很慢,PHP下CURL异常慢
- 苹果数据泄漏:内鬼频出,这是库克的错吗?
- 数据结构实验(C++实现):二叉树操作
- 关于P10的‘前’置指纹猜想——写在P10发布‘前’
- 基于C#在WPF中使用斑马打印机进行打印【转】
- 基于android的大学生图书管理系统app
热门文章
- 如何搭建多功能会议室
- 网络设备模拟器Packet Tracer教程
- SQL Anywhere(ASA) 数据库“File is shorter than expected -- transaction rolled back”错误修复...
- Alpine镜像介绍
- 裴蜀定理的证明与推广应用
- AIoT时代存储如何升级?长江存储发布高速闪存芯片UFS 3.1
- 一次哔哩哔哩面试经历,论程序员成长的正确姿势
- linux安装软件源有问题,opensuse软件安装源问题
- vs code使用Easy Sass插件编译sass文件路径报错问题解决
- 京东校园招聘2019.04.13 第一题 01序列拉齐