2014-09-16 1 views
1

Я ищу элегантный способ для преобразованияPythonic способ преобразования двух смежных элементов списка в кортеж и сохранить остальную часть списка

lst = [A, B, C, D, E..] 

в

lst = [A, B, (C, D), E] 

так, учитывая, что я хочу сделайте это на индексах 2 и 3, но сохраните список. Есть ли элегантный способ сделать это? Я смотрел с помощью лямбда-функции, но я этого не видел.

ответ

5

Просто изменить на месте:

lst[2:4] = [tuple(lst[2:4])] 

Назначение среза гарантирует, что мы заменяем старые элементы с содержимым списка на правой стороне присваивания, который содержит только один кортеж.

Демо:

>>> lst = ['A', 'B', 'C', 'D', 'E'] 
>>> lst[2:4] = [tuple(lst[2:4])] 
>>> lst 
['A', 'B', ('C', 'D'), 'E'] 
0

Вы могли бы использовать:

lst[2] = lst[2], lst.pop(3) 

или более общо:

lst[i] = lst[i], lst.pop(i+1) 

Однако вы должны убедиться, что оба индекса справедливы избегать IndexError исключений.

Смежные вопросы