다음과 같이하고 싶습니다.
myList = [10,20,30]
yourList = myList.append (40)
불행히도 목록 추가는 수정 된 목록을 반환하지 않습니다.
그렇다면 append
새 목록을 반환하려면 어떻게해야합니까?
답변:
추가 대신 연결을 사용하지 마십시오.
yourList = myList + [40]
그러면 새 목록 이 반환 됩니다. myList
영향을받지 않습니다. 당신이해야하는 경우 myList
영향 뿐만 아니라 하나를 사용 .append()
어쨌든, 다음 할당 yourList
(사본)과는 별도로 myList
.
list.append
쿼리가 아니라 명령입니다.
파이썬 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
도움이 되었기를 바랍니다
내장 목록 유형을 하위 클래스로 만들고 '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()
도움이되기를 바랍니다.
Storstamp의 답변을 확장하려면
myList.append (40) 만하면됩니다.
원래 목록에 추가됩니다. 이제 원래 목록을 포함하는 변수를 반환 할 수 있습니다.
매우 큰 목록으로 작업하는 경우 이것이 갈 길입니다.
append()
반환 하는 이유는 무엇 이었을까요None
? 어떤 선 원칙을 위반할까요?