У меня есть, может быть, глупая проблема, но я не могу понять, как ее решить. Поэтому в основном я пытаюсь сделать следующее:
Поэтому я подумал, что сделаю что-то вроде этого:
anotherList = [2,5,8]
myTuple = tuple([1,2,3].extend(anotherList))
Это не работает, поскольку оно вызывает ошибку:
TypeError: 'NoneType' object is not iterable
Это имеет смысл, поскольку результат операции extend
не является списком. Проблема в том, что я не смог сделать это в одном строковом коде, но только в 4-строчном коде, например:
anotherList = [2, 5, 8]
myList = [1, 2, 3]
myList.extend(anotherList)
myTuple = tuple(myList)
Есть ли способ упростить этот код? Он выглядит излишне длинным!
Вы не хотите использовать list.extend()
, period. Вместо этого вы объединяете отображение списка (буквенный синтаксис) с другим списком, используйте +
:
myTuple = tuple([1, 2, 3] + anotherList)
или вы можете преобразовать просто anotherList
и префикс кортежа:
myTuple = (1, 2, 3) + tuple(anotherList)
Здесь компилятор Python может оптимизировать и хранить (1, 2, 3)
в качестве константы с вашим объектом кода. Этот исходный кортеж создается один раз и повторно используется во всех исполнениях.
list.extend()
предназначен для обновления существующего объекта списка на месте с помощью ссылки на этот список, но использование его в литеральном списке означает, что полученный расширенный список не имеет оставшихся ссылок и снова отбрасывается.
В Python 3.5 и выше вы также можете использовать новый итеративный синтаксис распаковки:
myTuple = (1, 2, 3, *anotherlist)
Обратите внимание, что там не требуется вызов tuple()
, и поддерживается любой итеративный тип (а не только список). Python 2.7 находится в нем в прошлые дни, вам нужно начать планировать переход от него.
Вы можете добавлять списки:
result = tuple([1,2,3] + [4,5,6])
Так что это будет примерно так:
anotherList = [2, 5, 8]
myList = [1, 2, 3]
myTuple = tuple(myList + anotherList)
Ну, это неясно, но...
Попробуй это:
l=[2,5,8]
print(tuple([1,2,3]+l))
Вы можете объединить +
Альтернативно можно сделать *
(распаковка) в python 3:
print((*l, 1,2,3))
Или можете сделать chain
из itertools
:
import itertools
print(tuple(itertools.chain(l, [1,2,3])))
Или merge
с heapq
:
from heapq import merge
print(tuple(merge(l,[1,2,3])))
Или add
operator
формы:
import operator
print(tuple(operator.add(l, [1,2,3])))
list.extend()
возвращаетNone
, всегда, потому что список обновляется на месте . Не используйте его в списке литералов, это никогда не приведет к тому, что вы хотите. Вы хотели объединить что-нибудь? Затем используйте[...] + anotherlist
.concatenate
, вот и все!