ProgramingTip

Python- 새로운 목록 / 줄 초기화

bestdevel 2020. 11. 29. 12:05
반응형

Python- 새로운 목록 / 줄 초기화


이것은 매우 추합니다.

psData = []
nsData = []
msData = []
ckData = []
mAData = []
RData = []
pData = []

선언하는 방법이 있습니까?


alist, blist, clist, dlist, elist = ([] for i in range(5))

위의 접근 방식의 단점은 바로 그 이름의 수를 세고 오른쪽에 =정확히 일치하는 수의 빈 목록 (예 : range호출을 통해 또는 더 명시 적으로)을 가져야한다는 것 입니다.

중요한 것은 다음과 같은 것을 사용 하지 않는 것입니다.

alist, blist, clist, dlist, elist = [[]] * 5

...도 소재

alist = blist = clist = dlist = elist = []

그러면 모든 이름이 동일한 빈 목록을 참조하게됩니다 !


psData,nsData,msData,ckData,mAData,RData,pData = [],[],[],[],[],[],[]

필요에 따라 목록 팩토리와 함께 defaultdict를 사용하는 것을 고려할 수 있습니다. 다음과 같은 것 :

my_lists = collections.defaultdict(list)

그런 다음 my_lists [ "psData"] 직접 추가 할 수 있습니다. 관련 문서 페이지입니다 : http://docs.python.org/library/collections.html#collections.defaultdict


좀 더 접근 방식 :

alist, blist, clist, dlist, elist = ([] for _ in xrange(5))

[ 참고 ] :

  • xrange()보다 최적화range()Python2 . ( 참조 )

  • i변수는 사용하므로 사용할 수 _없습니다. ( 참조 )

  • xrange()Python3에 정의되어 있지 않습니다 .


단정함은 성능의 결과와 함께 올 수 있음을 명심하십시오. 범위 함수 호출은 초기화 프로세스를 약간 느리게합니다. 변수를 여러 번 다시 초기화해야하는 프로세스가 있는지주의하십시오.

import time
def r_init():
    st=time.time()
    alist, blist, clist, dlist, elist = ([] for i in range(5))
    et=time.time()
    print("{:.15f}".format(et-st))

def p_init():
    st=time.time()
    alist=[];blist=[];clist=[];dlist=[];elist=[]
    et=time.time()
    print("{:.15f}".format(et-st))

for x in range(1,10):
    r_init()
    p_init()
    print("\n")

클래스를 사용하여 데이터를 초기화 / 수 있으며, 더 많은 수 있으며, 더 많은 읽기 라인 지향적 일 수 있습니다.

처럼 :

class Data:
    def __init__(self):
        self.var1=[]
        <etc.>
    def zeroize(self):
        self.var1=[]
        <etc.>

그런 다음 시작 부분에서 다음을 수행합니다.

data=Data()

그런 다음 루프 또는 메인 포스트 선언의 어느 곳에서나 클래스를 사용할 수 있습니다.

data.var1.append(varN)
if(something):
    data.zeroize()

라인을 따라 뭔가

alist, blist, clist, dlist, elist = ([],)*5

가장 우아한 해결책으로 보일 것입니다.

참고 URL : https://stackoverflow.com/questions/2402646/python-initializing-multiple-lists-line

반응형