ProgramingTip

Python 목록 추가 메소드가 새 목록을 반환하도록 허용

bestdevel 2021. 1. 10. 22:57
반응형

Python 목록 추가 메소드가 새 목록을 반환하도록 허용


다음과 같이하고 싶습니다.

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

불행히도 목록 추가는 수정 된 목록을 반환하지 않습니다.

비용 append을 지불해야합니까?


추가 대신 연결을 사용하지 않습니다.

yourList = myList + [40]

그러면 목록 이 반환 됩니다. myList영향을받지 않습니다. 당신이 해야하는 경우 myList영향 뿐만 아니라 하나를 사용 .append()어쨌든, 다음 할당 yourList(사본)과는 할당 myList.


여기서 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]). 새 목록을 할당하는 대신 생성기를 시퀀스로 반환합니다. 본질적으로 첫 번째 iterable에서 소진 될 때까지 모든 요소를 ​​반환 한 다음 모든 iterable이 소진 될 때까지 다음 iterable로 진행됩니다.


Storstamp의 답변을 확장 비용

myList.append (40) 만하면됩니다.

이제 원래 목록을 포함하는 변수를 사용할 수 있습니다.

매우 큰 목록으로 작업하는 경우 갈 길입니다.


myList.append (40) 만하면됩니다.

새 목록을 반환하지 않고 원래 목록에 추가합니다.

참조 URL : https://stackoverflow.com/questions/12902980/allow-python-list-append-method-to-return-the-new-list

반응형