Как создать последовательность с одним элементом последовательности?

Для функции у меня есть параметр, который представляет собой Последовательность. Я хотел бы вернуть другую последовательность (того же типа) с одним элементом в данной последовательности.

def get_element_at_index_as_list(some_seq : Sequence, index: int):
    # return some_magic(some_seq[index])
    # s.t. type(some_magic(some_seq[i])) == type(some_seq)

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

khelwood 24.12.2020 00:42

Да, что сказал @khelwood. Если вы return some_seq[index:index+1] вы получите строку some_seq это строка, кортеж, если это кортеж, и т. д.

Mark 24.12.2020 00:43

Пожалуйста, объясните, где вы застряли. Sequence требуется метод index. Разве это не дает вам прямого решения?

Prune 24.12.2020 00:45
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
272
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Например.

return some_seq[index:index+1]

до тех пор, пока тип последовательности, который вы получаете, поддерживает срезы (и использует объекты своего собственного типа для срезов). Он работает как минимум для строки, списка и кортежа. Работает даже для range объектов.

Как указывает ShadowRanger в комментарии, это не работает для collections.deque, так как он не поддерживает нарезку. Я не думаю, что существует единственный способ, который работает для всех возможных типов последовательностей (тем более, что пользователи могут регистрировать свои собственные типы последовательностей).

Вот способ, который работает для deque (и большинства других типов последовательностей), но не работает для строки:

return type(some_seq)([some_seq[index]])

Нарезка работает для каждого встроенного (включая все модули, доступные в базовой установке) типа последовательности, о котором я знаю, за одним вопиющим исключением, collections.deque, у которого нет реальных причин опускать его, кроме легкой идиосинкразии deque, позволяющей максимальная длина и отсутствие согласия в отношении того, какой должна быть семантика нарезки ограниченной по длине deque (должна ли она потерять ограничение? сохранить ограничение и молча вести себя иначе, чем другие изменяемые последовательности, когда вы append к ней позже?). Однако массивы ctypes и mmap не сохранят тип (вы получите list или bytes обратно).

ShadowRanger 24.12.2020 00:49

Я искал return type(some_seq)([some_seq[index]]), так как он должен работать для любой последовательности, обеспечивающей преобразование из списка. 😊

vmiheer 24.12.2020 04:29
def get_element_at_index_as_list(some_seq : Sequence, index: int):
    return some_seq[index:index+1]

Другие вопросы по теме