Подтвердить что ты не робот

Как разрешить методу list append() возвращать новый список

Я хочу сделать что-то вроде этого:

myList = [10,20,30]
yourList = myList.append (40)

К сожалению, список append не возвращает измененный список.

Итак, как я могу позволить append возвращать новый список?

4b9b3361

Ответ 1

Вместо этого не используйте append, а конкатенацию:

yourList = myList + [40]

Это возвращает новый список; myList не будет затронуто. Если вам нужно иметь myList, а также использовать .append() в любом случае, затем назначьте yourList отдельно от (копии) myList.

Ответ 2

В Python 3 вы можете создать новый список, распаковав старый и добавив новый элемент:

a = [1,2,3]
b = [*a,4] # b = [1,2,3,4] 

когда вы делаете:

myList + [40]

На самом деле у вас есть 3 списка.

Ответ 3

list.append является встроенным и, следовательно, не может быть изменен. Но если вы хотите использовать что-то другое, кроме append, вы можете попробовать +:

In [106]: myList = [10,20,30]

In [107]: yourList = myList + [40]

In [108]: print myList
[10, 20, 30]

In [109]: print yourList
[10, 20, 30, 40]

Конечно, недостатком этого является то, что создается новый список, который занимает намного больше времени, чем append

Надеюсь, что это поможет

Ответ 4

Вы можете подклассифицировать тип встроенного списка и переопределить метод "добавить". Или еще лучше, создайте новую, которая будет делать то, что вы хотите. Ниже приведен код для переопределенного метода "добавить".

#!/usr/bin/env python

class MyList(list):

  def append(self, element):
    return MyList(self + [element])


def main():
  l = MyList()
  l1 = l.append(1)
  l2 = l1.append(2)
  l3 = l2.append(3)
  print "Original list: %s, type %s" % (l, l.__class__.__name__)
  print "List 1: %s, type %s" % (l1, l1.__class__.__name__)
  print "List 2: %s, type %s" % (l2, l2.__class__.__name__)
  print "List 3: %s, type %s" % (l3, l3.__class__.__name__)


if __name__ == '__main__':
  main()

Надеюсь, что это поможет.

Ответ 5

Попробуйте использовать itertools.chain(myList, [40]). Это вернет генератор в виде последовательности, вместо того, чтобы выделять новый список. По сути, это возвращает все элементы из первого итеративного, пока он не исчерпан, а затем переходит к следующему итерируемому, пока все итерации не исчерпаются.

Ответ 6

Просто для продолжения ответа Storstamp

Вам нужно только сделать myList.append(40)

Он добавит его в исходный список, теперь вы можете вернуть переменную, содержащую исходный список.

Если вы работаете с очень большими списками, это путь.

Ответ 7

Вам нужно только сделать myList.append(40)

Он добавит его в исходный список, а не вернет новый список.