Ответ 1
Когда вы используете функцию list
с любым итерабельным, будет создан новый объект списка со всеми элементами из итерабельного как отдельные элементы в списке.
В вашем случае строки являются допустимыми итерами Python, поэтому
>>> list('alpha')
['a', 'l', 'p', 'h', 'a']
>>> list('alphanumeric')
['a', 'l', 'p', 'h', 'a', 'n', 'u', 'm', 'e', 'r', 'i', 'c']
Итак, вы эффективно проверяете, является ли один список подписчиком другого списка.
Только в Python Строки имеют оператор in
, чтобы проверить, является ли одна строка частью другой строки. Для всех других коллекций вы можете использовать только отдельные члены. Цитирование документации,
Операторы
in
иnot in
проверяют членство в коллекции.x in s
принимает значение true, еслиx
является членом коллекцииs
, а false в противном случае.x not in s
возвращает отрицаниеx in s
. Тест на членство в коллекции традиционно был связан с последовательностями; объект является членом коллекции, если коллекция является последовательностью и содержит элемент, равный этому объекту. Однако для многих других типов объектов имеет смысл поддерживать тесты на членство без последовательности. В частности, словари (для ключей) и множества поддерживают тестирование членства.Для типов списка и кортежей
x in y
является истинным тогда и только тогда, когда существует индексi
такой, чтоx == y[i]
является истинным.Для Unicode и типов строк
x in y
является истинным тогда и только тогда, когдаx
является подстрокойy
. Эквивалентный тестy.find(x) != -1
. Примечание.x
иy
не обязательно должны быть одного типа; следовательно,u'ab'
в'abc'
вернетTrue
. Пустые строки всегда считаются подстрокой любой другой строки, поэтому""
в"abc"
вернетTrue
.