Взять список из списка в качестве входных данных в Python - PullRequest
0 голосов
/ 20 октября 2019

Мне нужно взять вход, который будет строго в формате [[a,b], [c,d], ... ], то есть список, содержащий несколько списков. Весь внутренний список будет содержать два целых элемента.

Пример:

a = [[0, 4], [1, 2], [5, 7], [6, 7], [6, 9], [8, 10]]

Проблема в том, что когда я передаю это в качестве ввода, он преобразуется в строку, а затем я использую эту программу, чтобы получитьжелаемый вывод, но я не могу заставить его работать должным образом.

def l2l(li):
    li = li.split(',', ' ')
    out= []
    for i in li:
        try:
            int(i)
            out.append(i)
        except ValueError:
            pass
    print(out)
    out = list([out[i], out[i+1]] for i in range(0,len(out)-1,2))

    return out

Ввод:

a = [[0, 4], [1, 2], [5, 7], [6, 7], [6, 9], [8, 10]]

Выход:

[['0', '4'], ['1', '2'], ['5', '7'], ['6', '7'], ['6', '9'], ['8', '1']]

Ответы [ 2 ]

3 голосов
/ 20 октября 2019

Используйте модуль Python ast, чтобы преобразовать его в литерал.

import ast 

a = "[[0, 4], [1, 2], [5, 7], [6, 7], [6, 9], [8, 10]]"

lol = ast.literal_eval(a)

print("({}){}".format(type(lol), lol))

ВЫХОД:

(<class 'list'>)[[0, 4], [1, 2], [5, 7], [6, 7], [6, 9], [8, 10]]
0 голосов
/ 20 октября 2019

Используйте встроенную функцию Python eval:

def l2l(li):
    li = eval(li)
    out= []
    for i in li:
        try:
            out.append(i)
        except ValueError:
            pass
    print(out)
    out = list([out[i], out[i+1]] for i in range(0,len(out)-1,2))

    return out
a = '[[0, 4], [1, 2], [5, 7], [6, 7], [6, 9], [8, 10]]'
l2l(a)

Out:

[[0, 4], [1, 2], [5, 7], [6, 7], [6, 9], [8, 10]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...