Я хочу сделать что-то вроде этого:
myList = [10, 20, 30]
yourList = myList.append(40)
К сожалению, добавление списка не возвращает измененный список.
Итак, как я могу разрешить append
возврат нового списка?
Не используйте добавление, а конкатенацию:
yourList = myList + [40]
Это возвращает новый список; myList
не пострадает. Если вам нужно, чтобы это тоже myList
повлияло на использование .append()
, то назначьте yourList
отдельно от (копии) myList
.
append()
возвратаNone
вместо того же списка? Какой принцип дзен это нарушит?list.append
это команда, а не запрос.В python 3 вы можете создать новый список, распаковав старый и добавив новый элемент:
a = [1,2,3] b = [*a,4] # b = [1,2,3,4]
когда вы делаете:
myList + [40]
На самом деле у вас есть 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
Надеюсь это поможет
источник
Вы можете создать подкласс встроенного типа списка и переопределить метод добавления. Или, что еще лучше, создайте новый, который будет делать то, что вы хотите. Ниже приведен код переопределенного метода добавления.
#!/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()
Надеюсь, это поможет.
источник
Попробуйте использовать
itertools.chain(myList, [40])
. Это вернет генератор как последовательность, а не выделит новый список. По сути, это возвращает все элементы из первой итерации до тех пор, пока она не будет исчерпана, а затем переходит к следующей итерации, пока не будут исчерпаны все итерации.источник
Просто чтобы расширить ответ Storstamp
Вам нужно только выполнить myList.append (40)
Он добавит его в исходный список, теперь вы можете вернуть переменную, содержащую исходный список.
Если вы работаете с очень большими списками, это правильный вариант.
источник
Вам нужно только выполнить myList.append (40)
Он добавит его в исходный список, но не вернет новый список.
источник