Chcę zrobić coś takiego:
myList = [10, 20, 30]
yourList = myList.append(40)
Niestety dołączenie listy nie zwraca zmodyfikowanej listy.
Jak więc mogę zezwolić append
na zwrócenie nowej listy?
Odpowiedzi:
Nie używaj zamiast tego dołączania, ale konkatenacji:
yourList = myList + [40]
To zwraca nową listę; myList
nie ulegnie zmianie. Jeśli musisz mieć myList
wpływ także użyć .append()
w każdym razie, a następnie przypisać yourList
oddzielnie (kopia) myList
.
list.append
jest poleceniem, a nie zapytaniem.
W Pythonie 3 możesz stworzyć nową listę, rozpakowując starą i dodając nowy element:
a = [1,2,3]
b = [*a,4] # b = [1,2,3,4]
kiedy robisz:
myList + [40]
W rzeczywistości masz 3 listy.
list.append
jest wbudowany i dlatego nie można go zmienić. Ale jeśli chcesz użyć czegoś innego niż append
, możesz spróbować +
:
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]
Oczywiście wadą jest to, że tworzona jest nowa lista, która zajmuje dużo więcej czasu niż append
Mam nadzieję że to pomoże
Możesz podklasować wbudowany typ listy i przedefiniować metodę „dołączania”. Lub jeszcze lepiej, stwórz nowy, który zrobi to, co chcesz. Poniżej znajduje się kod przedefiniowanej metody „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()
Mam nadzieję, że to pomoże.
Aby rozwinąć odpowiedź Storstampa
Musisz tylko zrobić myList.append (40)
Doda go do oryginalnej listy, teraz możesz zwrócić zmienną zawierającą oryginalną listę.
Jeśli pracujesz z bardzo dużymi listami, to jest właściwy sposób.
append()
powrotuNone
zamiast tej samej listy? Którą zasadę zen by to naruszyło?