Как мне разобрать строку, представляющую вложенный список, в реальный список? [Дубликат]

Один из способов использования списков аргументов в сочетании с do.call. Это не самое красивое решение, но оно работает.

foo.plot <- function(x,y,legend.args,...) {
    la <- list(
        x="bottomleft",
        legend="bar",
        pch=1
    )
    if (!missing(legend.args)) la <- c(la,legend.args)
    plot(x,y,...)
    do.call(legend,la)
}
foo.plot(1,1, xaxt = "n")    
foo.plot(1,1, xaxt = "n",legend.args=list(bg="yellow",title="legend"))

Один из недостатков заключается в том, что вы не можете указать, например, pch = 2, например, в списке legend.args. Вы можете обойти это с некоторыми предложениями, я оставлю его вам, чтобы продолжить драться с ним.


Изменить: см. Ответ Гэвина Симпсона для лучшей версии этой идеи.

10
задан 18 December 2009 в 06:54
поделиться

1 ответ

>>> import ast
>>> mylist = ast.literal_eval("['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz']")
>>> mylist
['foo', ['cat', ['ant', 'bee'], 'dog'], 'bar', 'baz']

ast.literal_eval :

Безопасная оценка узла выражения или строка, содержащая Python выражение. Строка или узел при условии, может состоять только из следующие буквальные структуры Python: строки, числа, кортежи, списки, dicts, booleans и None.

Это можно использовать для безопасной оценки строки, содержащие выражения Python из ненадежных источников без необходимо самостоятельно проанализировать значения.

25
ответ дан 3 December 2019 в 16:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: