update:

之前一版是错的,忽略了两层栈深还必须ticket、spce连续的要求

换个解法,代码有些冗长

#!/usr/bin/env python

# -*- coding: utf-8 -*-

def is_ticket(node):

return node.startswith('ticket')

def is_spec(node):

return node.startswith('spec')

def deal1(L):

if L:

node = L.pop(0) # 无论何种,都会使表长 -1

if is_ticket(node):

return node

return None

def deal2(L):

def match_ts(L):

node1, node2 = L[:2]

return is_ticket(node1) and is_spec(node2)

if len(L) < 2:

return False

elif match_ts(L):

del(L[:2]) # 表长 -2

return True

else:

return False

def deal4(L):

def match_ttss(L):

n1, n2, n3, n4 = L[:4]

return is_ticket(n1) and is_ticket(n2) and is_spec(n3) and is_spec(n4)

if len(L) < 4:

return False

elif match_ttss(L):

del(L[:4]) # 表长 -4

return True

else:

return False

def findout_no_spec_tickets(L):

res = []

while len(L):

if deal4(L):

continue

elif deal2(L):

continue

ret = deal1(L)

if ret:

res.append(ret)

return res

L =["ticket1","ticket2","spec1","spec2",

"ticket3","ticket4","spec3",

"ticket5","spec4","spec5",

"ticket6","ticket7","ticket8",

"ticket9","ticket10","spec6","spec7",

"ticket11","ticket12",

"ticket13","spec8",

"ticket14","spec9",

"ticket15","ticket16","ticket17",

"ticket18","spec1",

"ticket19",

"ticket20","spec2",

"ticket21"]

if __name__ == '__main__':

res = findout_no_spec_tickets(L)

print(res)

还有个短的写法, 无非是前向判断,滤出非'ts', 'ttss':

def is_ticket(node):

return node.startswith('ticket')

def find(L):

length = len(L)

for i in range(length):

if is_ticket(L[i]):

if i == length - 1:

yield L[i]

elif length - 4 < i < length - 1:

if is_ticket(L[i+1]):

yield L[i]

else:

if is_ticket(L[i+1]) and (is_ticket(L[i+2])

or is_ticket(L[i+3])):

yield L[i]

if __name__ == '__main__':

print(list(find(L)))

--------------------------------before---------------------------------------

用栈是最优的

def findout_no_spect(L):

def is_ticket(s): return s.startswith("ticket")

def is_spec(s): return s.startswith("spec")

no_spec_tickets = []

stack = []

for i in L:

if stack and is_spec(i): stack.pop()

if is_ticket(i): stack.append(i)

if len(stack) > 2: no_spec_tickets.append(stack.pop(0))

no_spec_tickets.extend(stack)

return no_spec_tickets

输出

>>> find_no_spect(L)

['ticket6', 'ticket7', 'ticket8', 'ticket11', 'ticket12']

python 列表比较不同物质的吸热能力_python列表里面根据一定的条件挑选元素相关推荐

  1. [转载] python中list的方法有哪些_Python 列表(list)中的方法

    参考链接: Python中list的方法 | in, not in, len(), min(), max() 整理的有点累了,有错希望给位朋友指教嘻嘻~~~ 1.append(在列表末尾添加元素) 实 ...

  2. python列表用来有序存放一组_python 列表 元组(自兴人工智能)

    一:列表 列表的作用就是一次性存储多个数,存具有同样作用的数据,存储长度不定,数据类不限 特点: 1,有序数列,有下标,从0开始,单个查询快 2,列表元素可以为空 3,列表元素可以重复 语法: 1)声 ...

  3. python中字母数字的大小比较_python列表怎么比较大小

    Python中可以使用cmp()函数比较两个列表的大小. cmp()函数语法:cmp(list1, list2) 参数: list1 -- 比较的列表.list2 -- 比较的列表. 返回值: 如果比 ...

  4. python 列表比较不同物质的吸热能力_飘着雪花的冬天

    这两天在折腾这个问题,google中英文的介绍都只提到一部分,所以决定写一篇blog讲一下整个配置过程,全当做笔记. SSL连接(HTTPS)是普遍使用的安全的HTTP连接方式,它通过证书认证的方式来 ...

  5. python 列表比较不同物质的吸热能力_比较不同物质吸热能力实验专项

    6 ( 1 )在此实验中,为比较水和煤油吸热能力的大小,我们可以加热相同的时间,观察 的不同:也 可以 . ( 2 )分析上表中的实验数据可知:质量相同的水和煤油,升高相同的温度时, 吸收的热量多,表 ...

  6. python中del和remove的区别_Python列表删除元素del、pop()和remove()的区别小结

    前言 在python列表的元素删除操作中, del, pop(), remove()很容易混淆, 下面对三个语句/方法作出解释 del语句 del语句可以删除任何位置处的列表元素, 若知道某元素在列表 ...

  7. python列表可以删除和修改吗_Python列表常见操作详解(获取,增加,删除,修改,排序等)...

    本文实例讲述了Python列表常见操作.分享给大家供大家参考,具体如下: 列表是由一系列按特定顺序排列的元素组成的对象.因为列表通常包含多个元素, 所以建议给列表指定一个表示复数的名称. 我们用方括号 ...

  8. python 列表嵌套字典 添加修改删除_python 列表、字典、元组等增删改查

    1. 元组 a. 定义和下标访问 元组的格式: (值,....) 如 s = (1,2,3) 元组的类型: tuple 元组的下标使用同字符串 注意:如果元组中只有一个元素,那么在定义时,需要加一个逗 ...

  9. python字符串去重 保留第一次出现的_python 列表和字符串

    python 列表中保留所有字符串前三项,并保存到一个新的列表 l = [s[:3] for s in data] python 在列表中查找包含所以某个字符串的项,并保存到一个新的列表 l = [s ...

最新文章

  1. 关于owner group others的测试
  2. Mac上Homebrew的使用
  3. 如何解决动态查询语句太长,大于数据库字符的最大长度
  4. 2019-04-15 Python之利用matplotlib和numpy的简单绘图
  5. java 多个 panel_在Java中,每次我向JPanel添加多个东西时,第二...
  6. 转贴 CxImage类库使用说明
  7. .net 调用 sql server 自定义函数,并输出返回值
  8. 如何把SAP WebIDE里的Web项目同Github仓库连接起来
  9. Weblogic EJB 学习笔记(3)精
  10. java sleep方法_一文搞懂 Java 线程中断!
  11. [数据结构与算法] : 栈的链式实现
  12. sql 只要一个字段相同则只显示一条数据_数据库
  13. 垄断者 Google Chrome 若被迫分拆,谁将会接盘?
  14. MyEclipse和Eclipse中修改编码
  15. HTML前端在线购书商城,基于HTML css的商城购物前端模板
  16. 卡诺模型:用数据捕捉用户的真正需求
  17. 小女子12行代码实现Javascript双向数据绑定两个input框
  18. PS合成在灯泡里活动的金鱼教程
  19. 2022-2028年全球与中国防水翘板开关行业产销需求与投资预测分析
  20. LINUX安装kafka步骤

热门文章

  1. 计算机网络学习笔记-01-概念,组成,功能,分类
  2. 计算机网络——链路层之PPP协议和HDLC协议
  3. 牛客15324 用来作弊的药水
  4. 动态规划--牛客网19校招--魔法深渊
  5. mysql sql先后执行_MySQL中SQL语句执行顺序
  6. mysql 8 修改root密码忘记_忘记mysql8或者mariadb5及以上 的root密码如何更改
  7. https访问http加载不出图片_前端解决第三方图片防盗链的办法
  8. C++编程(一):匈牙利命名法
  9. JavaSE——流程控制(接收输入Scanner、分支结构(if与switch)、循环结构(while、do-while与for))
  10. 吴恩达作业5:正则化和dropout