Питоническая грусть

Feb 09, 2017 11:08

Внезапно, мы можем сказать:

substring in string, но не можем сказать small_list in large_list. То есть можем, но проверяется не наличие вхождения (с сохранением порядка), а наличие указанного списка как элемента другого списка.

У строки есть и find, и in а у списка - пустота и уныние. Всё, что предлагают на SO - либо теряет порядок/количество, ( Read more... )

python

Leave a comment

Comments 23

eterevsky February 9 2017, 09:28:49 UTC
Потому что я сходу могу придумать три возможные интерпретации list_a in list_b:

- один список является элементом другого,

- один список равен слайсу другого,

- первый список является подмножеством второго.

Reply

amarao_san February 9 2017, 10:37:20 UTC
Я не требую "in", мне хотя бы find.

Если что, я заслал в багтрекер: http://bugs.python.org/issue29511

Reply

eterevsky February 9 2017, 10:45:54 UTC
Четыре варианта! Четыре! Тебе там в комментарии дали ссылку ещё на subsequence.

Я бы воизбежании конфьюжна сделал несколько отдельных функций, и ни одну не называл бы find().

Если тебе нужно именно подмножество, то это просто set(l1) <= set(l2).

Reply

amarao_san February 9 2017, 10:49:08 UTC
И все они выглядят как грёбанный Си. Батарейки?

set не катит, он теряет order.

Reply


vinslivins February 9 2017, 09:29:33 UTC
в питоне есть функция превращения [1,2,3,4] в [[1,2], [2,3], [3,4]]?

нарезать на слитные участки длиной с small_list?

Reply

amarao_san February 9 2017, 10:38:03 UTC
Буэ. Никакой памяти на таких не напасёшься.

Reply

vinslivins February 9 2017, 14:55:41 UTC
что так запоминать, что так. если будет 999 small_list in large_list, будет лучше?

Reply

amarao_san February 9 2017, 15:10:42 UTC
Если у меня len(small_list) == 1000, а len(big_list) == 1000000, то 1kkk массив ради 'in' - это уже перебор.

Reply


arthin February 9 2017, 11:06:30 UTC
Кстати, хороший вопрос - а так где вообще можно? В CL, афайр, только. В хаскеле вроде бы нет, впрочем, я его не очень знаю.

Reply

anonim_legion February 9 2017, 14:55:14 UTC
В яве в каких-нибудь apache commons наверняка есть

Reply

arthin February 9 2017, 15:12:50 UTC
Думаю, что и в стандартной библиотеке, надо проверить, кстати. Работа с коллекциями же везде более или менее по-лисповому делалась. В сях это std::search же. Вот потому странно, что там, где коллекции встроенные в язык, такие штуки куда-то деваются.

Reply


Leave a comment

Up