programing

list append() 메서드가 새 목록을 반환하도록 허용하는 방법

telecom 2023. 4. 15. 08:21
반응형

list append() 메서드가 새 목록을 반환하도록 허용하는 방법

나는 다음과 같은 것을 하고 싶다.

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

유감스럽게도 list append는 수정된 목록을 반환하지 않습니다.

그래서 어떻게 하면append새 목록을 반환할 수 있습니까?


다음 항목도 참조하십시오.이러한 리스트 조작(메서드)이 결과 리스트가 아닌 None을 반환하는 이유는 무엇입니까?

추가가 아닌 연결을 대신 사용합니다.

yourList = myList + [40]

그러면 새 목록이 반환됩니다.myList영향을 받지 않습니다.필요한 경우myList영향을 받는 것, 또는 사용하기도 합니다..append()어쨌든, 그럼 할당해 주세요.yourList(복사본)과는 별도로myList.

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

도움이 되었으면 좋겠다

유감스럽게도, 여기에서는, 어느 대답도, 요구된 것을 정확하게 해결하지 못하고 있습니다.다음은 간단한 접근법입니다.

lst = [1, 2, 3]
lst.append(4) or lst  # the returned value here would be the OP's `yourList`
# [1, 2, 3, 4]

RAM 사용률을 개선할 필요가 있는 경우, 마이크로벤치마크 등, 통상적으로 쓸모없는 작업을 실시할 필요가 있다고 생각할 수도 있습니다.하지만, 때때로 누군가가 정말로 「요청받은 것을 묻는다」(여기서는 이것이 사실인지 모르겠다)고 하는 경우가 있어, 현실은 우리가 알 수 있는 것보다 다양하다.여기 (컨텍스트를 벗어나서 제어된) 사용법이 있습니다.이렇게 하는 것이 아니라:

dic = {"a": [1], "b": [2], "c": [3]}

key, val = "d", 4  # <- example
if key in dic:
    dic[key].append(val)
else:
    dic[key] = [val]
dic
#  {'a': [1], 'b': [2], 'c': [3], 'd': [4]}

key, val = "b", 5  # <- example
if key in dic:
    dic[key].append(val)
else:
    dic[key] = [val]
dic
#  {'a': [1], 'b': [2, 5], 'c': [3], 'd': [4]}

위의 OR 표현식은 (문장이 아닌) 표현식이 필요한 모든 장소에서 사용할 수 있습니다.

key, val = "d", 4  # <- example
dic[key] = dic[key].append(val) or dic[key] if key in dic else [val]
#  {'a': [1], 'b': [2], 'c': [3], 'd': [4]}

key, val = "b", 5  # <- example
dic[key] = dic[key].append(val) or dic[key] if key in dic else [val]
#  {'a': [1], 'b': [2, 5], 'c': [3], 'd': [4]}

또는, 마찬가지로, 목록에 가짜 값이 없는 경우, 다음과 같이 시도할 수 있습니다.dic.get(key, <default value>)더 나은 방법으로요

사용해보십시오.itertools.chain(myList, [40])그러면 새 목록이 할당되지 않고 생성기가 시퀀스로 반환됩니다.기본적으로, 이것은 첫 번째 반복 가능에서 소진될 때까지 모든 요소를 반환하고 모든 반복 가능이 소진될 때까지 다음 반복 가능으로 진행합니다.

Storstamp의 답변에 대해 자세히 설명하겠습니다.

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

원래 목록에 추가되므로 원래 목록을 포함하는 변수를 반환할 수 있습니다.

만약 당신이 매우 많은 목록을 가지고 일하고 있다면, 이것이 좋은 방법입니다.

기본 제공 목록 유형을 하위 분류하고 '추가' 메서드를 재정의할 수 있습니다.또는 원하는 기능을 수행할 수 있는 새로운 기능을 만들 수도 있습니다.다음은 재정의된 '추가' 메서드의 코드입니다.

#!/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()

도움이 됐으면 좋겠다.

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

새 목록이 반환되지 않고 원래 목록에 추가됩니다.

언급URL : https://stackoverflow.com/questions/12902980/how-to-allow-list-append-method-to-return-the-new-list

반응형