如何将格式错误的列表转换为python中的int列表

时间:2014-02-21 20:32:45

标签: python list literals

这是我的清单;输入为字符串的数据库输出:

list_=(('[96, 71, 16, 81, 21, 56, 91]',),)

我的目标是将其转换为整体列表:[96, 71, 16, 81, 21, 56, 91]

我的尝试:

import ast
print ast.literal_eval(list_[0][0])

预期输出

Output:[96, 71, 16, 81, 21, 56, 91]

但是,该解决方案与某些输出

不兼容

list_[0][0]

导致错误:超出范围。

有关解决问题的其他可能方法的建议吗?感谢。

4 个答案:

答案 0 :(得分:1)

import ast
print ast.literal_eval([y for x in list_ for y in x][0])

答案 1 :(得分:1)

while type(list_) is not str:
    try:
        list_ = list_[0]
    except IndexError:
        break

现在list_是您想要的字符串。

答案 2 :(得分:0)

你试过这个:

from numpy import fromstring
fromstring(list_[0][0][1:(len(list_[0][0])-1)], sep=',', dtype='int32').tolist()

答案 3 :(得分:0)

只是为了好玩,一个通用的解开者

from collections import Iterable

def untangle(thing):
    stack = [thing]
    result = []
    while stack:
        current = stack.pop()
        if isinstance(current, basestring):
            if current[-1] == ']':
                current = current[1:-1]
            for x in current.strip().split(','):
                result.append(int(x.strip()))
        elif isinstance(current, Iterable):
            stack.extend(reversed(current))
        else:
            print "dont know what do do with", repr(current)
    return result

untangle((('[96, 71, 16, 81, 21, 56, 91]',),))
[96, 71, 16, 81, 21, 56, 91]