Python:逐行读取,在lin的每一端执行一个操作

2024-05-19 03:39:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近又开始学Python了,因为我已经好几年没有用它来做一些没有特定语言要求的学校项目。我当前的项目是使用max堆结构创建一个简单的优先级队列。我的输入是当前的问题。对于每一行输入,我们都会得到几个元组:一个字符串(数据)和一个数字(优先级)。在

例如:

(R10, 10), (R20, 20), (R90, 90), (R75, 75), (R35, 35), (R60, 60), (R260, 60), (R360, 60)  
(R15, 15)  
(R50, 50)  
(R275, 75)

对于每一行,我们需要将每个信息元组插入到优先级队列堆中,弹出并返回最高优先级,然后对每一行重复该操作。在

输出:(应该是什么)

^{pr2}$

我不知道如何将数据精确地转换成我可以使用的形式。我现在有这个。在

^{3}$

它返回这个:(这是目前我得到的最接近的)

['(R10, 10', 'R20, 20', 'R90, 90', 'R75, 75', 'R35, 35', 'R60, 60', 'R260, 60', 'R360, 60', 'R210, 10', 'R5, 5', 'R76, 76', 'R80, 80)\n']  
['(R15, 15)\n']  
['(R50, 50)\n']  
['(R275, 75)\n']  

如有任何帮助,请提前谢谢!在


Tags: 数据项目队列元组r20r35r10r90
1条回答
网友
1楼 · 发布于 2024-05-19 03:39:02

我认为用正则表达式最容易解决这个问题:

import re
# This regular expression will match '(<group1>,<group2>)'
# with any whitespace between ',' and <group2> being discarded
tuple_pattern = tuple_pattern = re.compile("\(([^,)]+),\s*([^)]+)\)")

with open(fileName) as f:
    # Find all occurences of the tuple pattern in the file, this gives
    # us an array of tuples where each tuple is (<group1>,<group2>)
    # for each match
    tuples = tuple_pattern.findall(f.read())

输入数据的结果是:

^{pr2}$

编辑:

如果需要分别处理每一行,只需对file.readlines()中的每一行执行tuple_pattern.findall(line)

import re
tuple_pattern = re.compile("\(([^,)]+),\s*([^)]+)\)")

with open(filename) as f:
    for line in f.readlines():
        print(tuple_pattern.findall(line))

输出:

[('R10', '10'), ('R20', '20'), ('R90', '90'), ('R75', '75'), ('R35', '35'), ('R60', '60'), ('R260', '60'), ('R360', '60')]
[('R15', '15')]
[('R50', '50')]
[('R275', '75')]

相关问题 更多 >

    热门问题