2014-02-21 1 views
-2

Это мой список; выход из базы данных вводится в виде строки:Как преобразовать неверный список в список int в python

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]

Однако, solutio п не совместим с некоторыми из выходного

list_[0][0]

приводит к ошибке: вне диапазона.

Любые предложения по другим возможным методам решения проблемы? Благодарю.

+7

Покажите нам сценарий, который * не * работа, а не код, который * делает * – mhlester

+2

Вы должны знать, как вход генерируется, возможные значения , В противном случае проблему решить невозможно. – freakish

+0

list_ [0] [0] указывает элемент в списке списков при создании списка целых чисел ...? – ysakamoto

ответ

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

Что делать, если у вас есть '('stringstringstring',)'? Это сделает список символов в строке. OP все равно говорит об индексе IndexError. – 2rs2ts

+0

Привет @hwatkins, спасибо за ваше решение. Он отлично работает, я попытаюсь посмотреть, может ли он вписаться в мой общий алгоритм. – Tiger1

+0

да, его комбинация строк. Его индекс вещь. – Tiger1

0

Вы пробовали это:

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

Привет @CCP, спасибо за решение, но я думаю, что метод Хваткина соответствует тому, что я имел в виду. – Tiger1

+0

@ Tiger1 добро пожаловать;) – CCP

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

list_ Теперь это строка, которую вы хотите.

0

И просто для удовольствия, родовое untangler

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] 
+0

Привет @cmd, спасибо за предложение, он работает, но может быть слишком длинным. Я ищу одну или две линии кода. – Tiger1

+0

@ Tiger1 Я решил, что это будет больше, чем вы хотели. Я разместил это, чтобы решить проблему для любой вложенности ввода;) – cmd