Я хочу зробити щось подібне:
myList = [10, 20, 30]
yourList = myList.append(40)
На жаль, додаток списку не повертає змінений список.
Отже, як я можу дозволити append
повернути новий список?
Відповіді:
Натомість не використовуйте додаток, а конкатенацію:
yourList = myList + [40]
Це повертає новий список; myList
це не вплине. Якщо вам також потрібно myList
вплинути , будь-яким чином скористайтеся .append()
, тоді призначте yourList
окремо від (копія) myList
.
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)
Він додасть його до вихідного списку, а не поверне новий.
append()
поверненняNone
замість того самого списку? Який принцип дзен він би порушив?