知乎上有人问 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列表元素分组相关推荐

  1. python列表元素零的移动_python列表多行

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 这个列表推导式共有145列: memberdef_list = and std: ...

  2. 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 ...

  3. python列表元素下标是什么_python列表中元素插入位置总结

    python列表中元素插入位置总结 , python中列表去掉最后一个元素 ist.insert(index,obj) 列表与方法之间用点号相隔,括号内需要添入的参数分别是索引和要插入的元素. 要完成 ...

  4. python列表的排序方法是_Python列表排序 reverse、sort、sorted 操作方法详解

    python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...

  5. python列表推导式生成随机数_python列表推导式

    列表推导式介绍 列表推导式是Python中快速创建列表的一种方式. 之前我们要创建(Python3中)一个元素是0-9的列表,我们可能会像下面这么写: >>> list(range( ...

  6. python里元组和列表的共同点和不同点_Python列表和元组的相同点和不同点是什么...

    相同点:属于有序序列.可以强制转换.使用len()统计元素个数.使用count()统计指定元素的出现次数.不同点:1.元组类型为tuple,列表类型为list:2.元组不能修改,列表可以根据索引来修改 ...

  7. python列表中包含元祖_python列表与元祖

    python 的列表和元素: 共同点:有序的 区别:1.列表可以修改增加删除列表内容,元组不能修改 联系:元组中包含列表的元素,可以修改列表元素. 分析:1.列表:LIST1=[1,2,3,4,5,6 ...

  8. python列表使用技巧与方法_Python列表的相关操作与方法

    Python列表的相关操作与方法 1.列表 why:int.bool.str存在缺陷 str:存储少量的数据:所有的操作获取的内容都是 str类型,存储的数据类型单一. what: 列表可以承载任意数 ...

  9. python将列表的第一列删除_python列表基本操作:索引(访问),切片,扩展,删除,追加,统计,长度,获取下标等...

    List(列表) 列表,是一种用于保存一系列有序项目的集合,在 Python 中你需要在它们之间加上一个逗号 注意:列表是可变数据类型 列表的基本操作有:索引(访问),切片,扩展,删除,追加,统计,长 ...

  10. python元组和列表都支持的方法_python列表方法和元组

    Python列表方法 1.append()在列表末尾追加新对象 >>> lst=[1,2,3] >>> lst [1, 2, 3] >>> lst ...

最新文章

  1. 【水】JSOI完美的对称
  2. 浅析面包屑导航对网站SEO优化有哪些作用?
  3. 源码剖析Django REST framework的认证方式及自定义认证
  4. iOS之深入解析WKWebView加载的生命周期与代理方法
  5. TensorFlow基础笔记(5) VGGnet_test
  6. Jest 测试框架 beforeEach 的设计原理解析
  7. mysql内存机制_MySQL内存管理机制
  8. React:Conditional Rendering(条件渲染)
  9. EZEMC测试软件_四种常见的EMC仿真软件介绍
  10. Stardict 81部中文词典下载
  11. 干货:如何打造一个直播平台
  12. wordpress 安全保密hacks
  13. 全返模式是怎样玩的?解析购盈利模式
  14. 模拟网上手机抽奖界面(供大家BS......)
  15. php 多个curl 很慢,PHP下CURL异常慢
  16. 苹果数据泄漏:内鬼频出,这是库克的错吗?
  17. 数据结构实验(C++实现):二叉树操作
  18. 关于P10的‘前’置指纹猜想——写在P10发布‘前’
  19. 基于C#在WPF中使用斑马打印机进行打印【转】
  20. 基于android的大学生图书管理系统app

热门文章

  1. 如何搭建多功能会议室
  2. 网络设备模拟器Packet Tracer教程
  3. SQL Anywhere(ASA) 数据库“File is shorter than expected -- transaction rolled back”错误修复...
  4. Alpine镜像介绍
  5. 裴蜀定理的证明与推广应用
  6. AIoT时代存储如何升级?长江存储发布高速闪存芯片UFS 3.1
  7. 一次哔哩哔哩面试经历,论程序员成长的正确姿势
  8. linux安装软件源有问题,opensuse软件安装源问题
  9. vs code使用Easy Sass插件编译sass文件路径报错问题解决
  10. 京东校园招聘2019.04.13 第一题 01序列拉齐