在具有匹配属性的列表中查找第一个和最后一个列表

彼得·阿克森(Peter Axelsson)

长期潜伏,第一次海报。

我有一个非常大的文本文件(1,184,834行),其中包含有关欧洲特定日期的航班计划的一些信息。每列代表一个新键,每行代表排期的一个新部分。到目前为止,我已经设法使用以下代码将分析所需的数据提取到列表列表中:

import pprint
import csv
pp = pprint.PrettyPrinter(width=200)

text = open('E:/Downloads/TNFL09/20120506_m1.so6', 'r')

def clean_data(text, rows):
    newlist = []
    reader = list(csv.reader(text, delimiter=' '))

    for n in xrange(0, len(reader)):
       newlist.append(reader[n][1:6]+reader[n][9:12]+reader[n][16:18])  

    return newlist[:rows]


data = clean_data(text,90)
pp.pprint(data)

输出如下:

['UAFM', 'EGKK', 'A333', '083914', '084141', 'CMB595', '120506', '120506', '156912756', '91'],

['KEWR', 'VABB', 'B772', '005500', '010051', 'UAL48', '120506', '120506', '156912546', '1']

['KEWR', 'VABB', 'B772', '010051', '010310', 'UAL48', '120506', '120506', '156912546', '2']

对于此问题,有趣的项目是开始/结束时间(#3和#4),航班ID(#8)和序列号(#9)。

每个档次都包含多个连续的序列号。因此,要获得完整的航班,必须提取该航班ID的所有序列号。

我想做的是提取每个航班的开始时间和结束时间。我最初的想法是循环遍历列表中的每个列表,并将序列号与先前迭代的列表进行比较。但是我是Python的初学者,经过几天的谷歌搜索后放弃了。

谢谢,

彼德

悬挂

一种方法是,假设您的列表是按序列号排序的(看起来像是它们),是通过生成器运行它以将每个排期汇总在一起:

def aggregate_flights(flights):
    out = []
    last_id = ''
    for row in flights:
        if row[-2] != last_id and len(out) > 0:
            yield (last_id,out)
            out = []
        last_id = row[-2]
        out.append((row[3],row[4])) #2-tuple of (start,end)
    yield (last_id,out)

给出您的示例输入:

list(aggregate_flight(agg))
Out[21]: 
[('156912756', [('083914', '084141')]),
 ('156912546', [('005500', '010051'), ('010051', '010310')])]

有点混乱,但是您明白了。对于每个航班,您都会有一个由2个元组组成的列表(start,end),您可以对其进行进一步处理以获取该(start,end)航班的总体信息您甚至可以修改生成器,以便为您提供整体(start,end),但是我倾向于将我的处理过程分成较小的,易于调试的模块化块。

如果您的输入排序,则需要使用来累积数据defaultdict给它一个list工厂,并(start,end)为每行添加一个元组。

编辑:根据要求,这是(start,end)每次飞行仅产生一的修改

def aggregate_flights(flights):
    last_id,start,end = None,None,None
    for row in flights:
        if row[-2] != last_id and last_id is not None:
            yield (last_id,(start,end))
            start,end = None,None
        if start is None:
            start = row[3]
        last_id = row[-2]
        end = row[4]
    yield (last_id,(start,end))

在这一点上,我会注意到输出变得太难看而无法遵守(一个(id,(start,end))元组,嗯),所以我将移至anamedtuple处以使情况变得更好:

from collections import namedtuple
Flight = namedtuple('Flight',['id','start','end'])

现在,您有了:

def aggregate_flights(flights):
    last_id,start,end = None,None,None
    for row in flights:
        if row[-2] != last_id and last_id is not None:
            yield Flight(last_id,start,end)
            start,end = None,None
        if start is None:
            start = row[3]
        last_id = row[-2]
        end = row[4]
    yield Flight(last_id,start,end)

list(aggregate_flights(agg))
Out[18]: 
[Flight(id='156912756', start='083914', end='084141'),
 Flight(id='156912546', start='005500', end='010310')]

好多了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

解析xml查找具有匹配属性的最后一个元素

来自分类Dev

解析xml查找具有匹配属性的最后一个元素

来自分类Dev

使用递归查找列表的第一个和最后一个元素

来自分类Dev

在一行中查找具有特定值的第一个和最后一个条目

来自分类Dev

在Python列表中查找元素的第一个和最后一个出现的最佳方法是什么?

来自分类Dev

查找升序列表中降序的第一个和最后一个数字

来自分类Dev

查找具有至少一个匹配属性的集合中的所有对象

来自分类Dev

从Haskell的列表中删除第一个和最后一个元素

来自分类Dev

ngFor循环列表中的第一个和最后一个对象

来自分类Dev

在列表列表中向后查找第一个匹配项

来自分类Dev

在列表中查找第一个标志更改

来自分类Dev

在数组php中查找第一个和最后一个匹配序列

来自分类Dev

列表OCaml的第一个和最后一个元素

来自分类Dev

AngularJs显示过滤列表的第一个和最后一个

来自分类Dev

添加列表的第一个和最后一个号码

来自分类Dev

连接列表的最后一个和第一个值

来自分类Dev

Python 列表的总和不添加第一个和最后一个

来自分类Dev

如果第一个和最后一个元素相等,则完整列表

来自分类Dev

在一个列表中查找具有与另一个对象列表中的属性相匹配的属性的所有对象

来自分类Dev

在R中查找条纹的第一个和最后一个日期

来自分类Dev

什么是类似Scala的方式来更改列表中的第一个和最后一个

来自分类Dev

链接列表:查询存储在SQL表中的链表的第一个和最后一个元素

来自分类Dev

C-交换单链列表中的第一个和最后一个元素

来自分类Dev

clojure中带有第一个自变量引用的列表的值是最后一个自变量?

来自分类Dev

用于查找匹配属性值的 JavaScript for 循环在第一个对象之后停止迭代

来自分类Dev

UIStackView中的第一个基准和最后一个基准属性

来自分类Dev

有没有办法只选择PROLOG中列表的第一个和最后一个元素?

来自分类Dev

数组中单词列表中带有特定第一个和最后一个字母的单词

来自分类Dev

查找数组中的第一个、最后一个和中间值。返回最大的一个

Related 相关文章

  1. 1

    解析xml查找具有匹配属性的最后一个元素

  2. 2

    解析xml查找具有匹配属性的最后一个元素

  3. 3

    使用递归查找列表的第一个和最后一个元素

  4. 4

    在一行中查找具有特定值的第一个和最后一个条目

  5. 5

    在Python列表中查找元素的第一个和最后一个出现的最佳方法是什么?

  6. 6

    查找升序列表中降序的第一个和最后一个数字

  7. 7

    查找具有至少一个匹配属性的集合中的所有对象

  8. 8

    从Haskell的列表中删除第一个和最后一个元素

  9. 9

    ngFor循环列表中的第一个和最后一个对象

  10. 10

    在列表列表中向后查找第一个匹配项

  11. 11

    在列表中查找第一个标志更改

  12. 12

    在数组php中查找第一个和最后一个匹配序列

  13. 13

    列表OCaml的第一个和最后一个元素

  14. 14

    AngularJs显示过滤列表的第一个和最后一个

  15. 15

    添加列表的第一个和最后一个号码

  16. 16

    连接列表的最后一个和第一个值

  17. 17

    Python 列表的总和不添加第一个和最后一个

  18. 18

    如果第一个和最后一个元素相等,则完整列表

  19. 19

    在一个列表中查找具有与另一个对象列表中的属性相匹配的属性的所有对象

  20. 20

    在R中查找条纹的第一个和最后一个日期

  21. 21

    什么是类似Scala的方式来更改列表中的第一个和最后一个

  22. 22

    链接列表:查询存储在SQL表中的链表的第一个和最后一个元素

  23. 23

    C-交换单链列表中的第一个和最后一个元素

  24. 24

    clojure中带有第一个自变量引用的列表的值是最后一个自变量?

  25. 25

    用于查找匹配属性值的 JavaScript for 循环在第一个对象之后停止迭代

  26. 26

    UIStackView中的第一个基准和最后一个基准属性

  27. 27

    有没有办法只选择PROLOG中列表的第一个和最后一个元素?

  28. 28

    数组中单词列表中带有特定第一个和最后一个字母的单词

  29. 29

    查找数组中的第一个、最后一个和中间值。返回最大的一个

热门标签

归档