python: распаковка списков и наборов

Если вы хотите, чтобы он работал с классами. Другими словами, элемент мог бы совместно использовать имена классов и иметь свой собственный уникальный счет:

var content_id = '.myclass';  

max = 1;
//binding keyup/down events on the contenteditable div
$(content_id).keyup(function(e){ check_charcount(this, max, e); });
$(content_id).keydown(function(e){ check_charcount(this, max, e); });

function check_charcount(elem, max, e){   
    if(e.which != 8 && $(elem).text().length >= max){       
        e.preventDefault();
    }
}
0
задан Lewis 13 July 2018 в 09:37
поделиться

1 ответ

Вы не можете применить регулярное выражение к списку. Вы могли бы перевести список в строку с помощью str, а , затем применить регулярное выражение, но вы, вероятно, не должны. *)

Intead, Я предлагаю рекурсивную функцию для сглаживания списка, а также итерацию как ключей, так и значений в любых вложенных словарях и рекурсивное обращение к любым вложенным спискам, наборам, кортежам или диктофонам.

def unpack(seq):
    if isinstance(seq, (list, tuple, set)):
        yield from (x for y in seq for x in unpack(y))
    elif isinstance(seq, dict):
        yield from (x for item in seq.items() for y in item for x in unpack(y))
    else:
        yield seq

lst = [None, [1, ({2, 3}, {'foo': 'bar'})]]
print(list(unpack(lst)))
# [None, 1, 2, 3, 'foo', 'bar']

Обновление: Для Python 2.x замените yield from (...) на for x in (...): yield x или непосредственно return списками вместо использования генератора для элементов yield:

def unpack(seq):
    if isinstance(seq, (list, tuple, set)):
        return [x for y in seq for x in unpack(y)]
    elif isinstance(seq, dict):
        return [x for item in seq.items() for y in item for x in unpack(y)]
    else:
        return [seq]

*) Поскольку вы спросил: что, если числа содержат точку, или строки содержат ... ну, что-нибудь? Кроме того, вам нужно будет воссоздать реальные объекты с их соответствующим типом (например, int) из согласованных строк. И что если список содержит объекты, отличные от строк или чисел, которые не могут быть легко воссозданы из их строкового представления?

2
ответ дан tobias_k 17 August 2018 в 13:16
поделиться
  • 1
    ваш код имеет недопустимый синтаксис в строке 3 – Lewis 13 July 2018 в 09:56
  • 2
    @Lewis Не видел тег Python 2, позвольте мне исправить это ... сделано. – tobias_k 13 July 2018 в 09:58
  • 3
    Спасибо, это работает! и почему & quot; Вы можете превратить список в строку с помощью str, а затем применить регулярное выражение, но вы, вероятно, не должны. & quot; – Lewis 13 July 2018 в 10:09
  • 4
    @Lewis Ну, что, если числа содержат точку, или строки содержат ... ну, что-нибудь? Кроме того, вам нужно будет воссоздать фактические объекты с их соответствующим типом из согласованных строк. И что, если в списке содержатся объекты, отличные от строк или чисел, которые не могут быть легко воссозданы из их строкового представления? – tobias_k 13 July 2018 в 10:15
  • 5
    Уоуу, такая головная боль. Да, ваш ответ намного лучше, спасибо – Lewis 13 July 2018 в 10:20
Другие вопросы по тегам:

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