首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:从两个单独的行读取,创建两个列表

Python:从两个单独的行读取,创建两个列表
EN

Stack Overflow用户
提问于 2016-04-27 05:15:41
回答 2查看 85关注 0票数 0

我正在读取一个txt文件:(它的格式如下所示)

(+1 +2 +3 +4) (-4-9)(-3-6-7)

我想要的输出是有两个(整数)列表

无论是在\n之前还是之后。

示例:

代码语言:javascript
复制
BEFORE_LIST = [1,2,3,4] 

AFTER_LIST = [[-4,-9] , [-3, -6, -7]]

我无法找出分裂和剥离的正确组合来实现这一点。

任何帮助我都非常感激。

EN

回答 2

Stack Overflow用户

发布于 2016-04-27 06:05:59

代码语言:javascript
复制
listOfValues = (x.split(' ')for x in (val.replace(')','') for val in input().split('(')))
listOfIntegers = list(filter(None, [[int(value) for value in values if isInt(value)]for values in listOfValues]))

print(listOfIntegers)

is isInt方法可以定义为:

代码语言:javascript
复制
def isInt(s):
    try:
        int(s)
        return True
    except:
        return False

或者更详细的解决方案,以避免例外情况:

代码语言:javascript
复制
def isInt(s):
    return s.replace('+').replace('-').isdecimal() // doesn't cover all cases 

这不检查无效的输入格式(例如不匹配的偏执)。

票数 2
EN

Stack Overflow用户

发布于 2016-04-27 05:59:07

能行吗?

代码语言:javascript
复制
import re
from ast import literal_eval
with open('test','r') as f:
    for line in f:
        line = line.replace(' ',',').replace('+','')
        my_list = re.findall(r'\(.+?\)',line)
        result = [list(literal_eval(i)) for i in my_list]
        if len(result)==1:
            result = [i for term in result for i in term ]

        print result

输出:

代码语言:javascript
复制
[1, 2, 3, 4]
[[-4, -9], [-3, -6, -7]]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36880860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档