Python не поддерживает добавление кортежа в список:
>>> [1,2,3] + (4,5,6)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "tuple") to list
Каковы недостатки для предоставления такой поддержки в языке?Обратите внимание, что я ожидал бы, что это будет симметрично: [1, 2] + (3, 4)
и (1, 2) + [3, 4]
оба приведут к совершенно новому списку [1, 2, 3, 4]
.Мое обоснование состоит в том, что, как только кто-то применяет оператор + к совокупности кортежей и списков, он, скорее всего, сделает это снова (очень вероятно, в том же выражении), поэтому мы могли бы также предоставить список, чтобы избежать дополнительных преобразований.
Вот моя мотивация для этого вопроса.
Часто случается, что у меня есть небольшие коллекции, которые я предпочитаю хранить в виде кортежей, чтобы избежать случайных изменений и повысить производительность.Затем мне нужно объединить такие кортежи со списками, и необходимость преобразования каждого из них в список приводит к очень уродливому коду.
Обратите внимание, что +=
или extend
могут работать в простых случаях.Но в целом, когда у меня есть выражение
columns = default_columns + columns_from_user + calculated_columns
, я не знаю, какие из них являются кортежами, а какие списками.Поэтому мне нужно либо преобразовать все в списки:
columns = list(default_columns) + list(columns_from_user) + list(calculated_columns)
, либо использовать itertools:
columns = list(itertools.chain(default_columns, columns_from_user, calculated_columns))
Оба эти решения уродливее, чем простая сумма;и chain
также может быть медленнее (поскольку он должен перебирать входы элемента по одному за раз).