python - 根据先前元素的条件将元素添加到列表

标签 python python-3.x python-2.7

我正在读取一个 txt 文件,其格式如下:

Event B     0     40
Event B     0     75    
Event B     1     30    
Event A         
Event B     1     50    
Event B     1     70    
Event A         
Event A                     
Event B     2     40

我正在尝试编写以下逻辑:

对于每个事件 A: 打印自最后一个事件 A 以来第一个事件 B 的第 1 列和第 2 列

因此输出如下:

Event B     0     40
Event B     0     75    
Event B     1     30    
Event A     0     40
Event B     1     50    
Event B     1     70    
Event A     1     50    
Event A     N/A   N/A               
Event B     2     40
etc...

我可以将文件作为列表读取:

with open(event_file) as schedule:
     schedule = schedule.readlines()


for i in range(0, len(schedule)):
     if schedule[i][0] == 'Event A':
          if schedule[i-X][0] == 'Event A':
               print(schedule[i-X+1])  # Where X is how many lines before Event A the last one was... but I really dont know how to determine this.. Nor do I know if any of this is the right way to go about it.

我希望我说得有道理。

最佳答案

您只需记住最后一个事件 B:

txt = """Event B  ,   0 ,    40
Event B  ,   0    , 75    
Event B  ,   1    , 30    
Event A
Event B  ,   1    , 50    
Event B  ,   1    , 70    
Event A
Event A        
Event B  ,   2    , 40
"""

# split your data:
data = [ [k.strip() for k in row.strip().split(",")] for row in txt.split("\n")]

rv = []
b = None
for d in data: 
    if d[0] == "Event A":
        # either add the remembered B or N/A's
        if b:
            rv.append([ d[0], b[1],b[2] ])
        else:
            rv.append([ d[0], "N/A","N/A" ])
        b = None     # delete remebered b
        continue
    elif b == None:  # remember first b
        b = d
    if d and d[0]:   # if not empty, add to results 
        rv.append(d)

print (rv) # print results

输出:

[['Event B', '0', '40'], 
 ['Event B', '0', '75'], 
 ['Event B', '1', '30'], 
 ['Event A', '0', '40'], 
 ['Event B', '1', '50'], 
 ['Event B', '1', '70'], 
 ['Event A', '1', '50'], 
 ['Event A', 'N/A', 'N/A'], 
 ['Event B', '2', '40']]

关于python - 根据先前元素的条件将元素添加到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49652950/

相关文章:

python - 如何按定义元素的长度将包含 NaN 的 Series 分成两部分?

python - 从 MySQL 迁移到 Postgres 后了解 "SEPARATOR"处或附近的语法错误

Python - 在内存中生成 csv 文件,然后将其数据编码为 base64?

python - 如何将列表列表打印为简单字符串?

python - 如何从 Python : aka Command-Control-Shift-4 内部截取 Mac OS X 中的屏幕截图

Python - 将二维列表中的值除以单个值的简便快捷方法

python-3.x - 如何使用字符串常量和数字(计数)更新 pandas 列

python-2.7 - 安装pywin32

python - 即使使用 python with 语句,写入文件也无法完成

python - 如何修复试图捕捉某些单词和 ID 的正则表达式?