繁体   English   中英

将以不同格式表示的整数字符串转换为整数列表 Python

[英]Convert a string of integers represented in different formats into a list of integers Python

除了循环之外,是否有一种简单的方法可以将这种表示形式转换为整数列表?

s = ['0','1','2:5','0x4']

list_i=[0,1,2,3,4,5,0,0,0,0]

您可以像这样使用带有三元运算符的列表推导式:

list_i = [i for t in s for i in ((lambda r: range(int(r[0]), int(r[1]) + 1))(t.split(':')) if ':' in t else (lambda r: [int(r[0])] * int(r[1]))(t.split('x')) if 'x' in t else (int(t),))]

或者您可以改用for循环:

list_i = []
for token in s:
    if ':' in token:
        start, end = token.split(':')
        list_i.extend(list(range(int(start), int(end) + 1)))
    elif 'x' in token:
        number, repeat = token.split('x')
        list_i.extend([int(number)] * int(repeat))
    else:
        list_i.append(int(token))

不,没有。 您需要单独处理特殊字符串。 您需要遍历列表,检查给定元素是否为简单整数,如果是,则按原样进行转换。 如果所考虑的元素很特殊(在您的情况下为0x42:5 ),您需要代码来处理它。 尝试这个:

oldList = ['0','1','2:5','0x4'] 

def isInt(val):
    try:
        int(val)
        return True
    except ValueError:
        return False

def convertRange(val):
    l = val.split(':')
    return [x for x in range(int(l[0]), int(l[1])+1)]


def convertRepetition(val):
    l = val.split('x')
    return [int(l[0]) for i in range(0, int(l[1]))]

newList = []

for elem in oldList:
    if ':' in elem:
        newList.extend(convertRange(elem))

    elif 'x' in elem:
        newList.extend(convertRepetition(elem))

    elif isInt(elem):
        newList.append(int(elem))

print(newList)

convertRange()convertRepitition()函数处理您的问题提到的两种特殊情况。

如果您可以自由地重新定义 s-list 的设置方式,则可以使用这样的 python 语法

s = ['[0]','[1]','range(2,6)','[0]*4'] 
list_i = []
[exec('list_i+='+i) for i in s]
print(list_i)
# which outputs
[0, 1, 2, 3, 4, 5, 0, 0, 0, 0]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM