2012-07-12 2 views
0

내가 원하는 것은 목록을 가져 와서 다른 배열의 항목을 포함하는 배열을 생성하는 것입니다. 내가 배열 내가이 위의 코드부터 감사를 작동하지 않습니다 어떻게 다른 목록에서 명명 된 빈 배열을 생성하는 방법

newtest301 
newtest302 
newtest303 
etc 

라는 이름으로 생성 할

def GenerateArray(pers): 
    for item in pers: 
     (newtest30 + str(item)) = [] 
     (newtest60 + str(item)) = [] 
     (newtest120 + str(item)) = [] 
     (newtest5min + str(item)) = [] 
     (newtest10min + str(item)) = [] 
     (newtest15min + str(item)) = [] 
     (newtest20min + str(item)) = [] 
     (newtest25min + str(item)) = [] 
     (newtest30min + str(item)) = [] 
     (newtest35min + str(item)) = [] 
     (newtest40min + str(item)) = [] 
     (newtest45min + str(item)) = [] 
     (newtest50min + str(item)) = [] 
     (newtest55min + str(item)) = [] 
     (newtest60min + str(item)) = [] 

예를 들어이 list = [1,2,3,4,5,6,7] 같은 목록 : 이것은 내가 뭘하려합니다.

+3

동적 변수 이름을 생성하는 것은 유지/디버그하기가 더 어렵 기 때문에 좋지 않습니다. 대신 목록 또는 목록 사전을 사용하십시오. –

+0

또한, 변수'list' (또는 다른 내장 된 파이썬 유형이나 키워드)의 이름을 지정하지 마십시오! –

답변

2

변수 이름을 동적으로 생성하는 것은 유지하기가 어렵습니다. 그것은 (현재) Cpython에서 가능합니다 (다른 구현체는 다르게 작동 할 수 있습니다). 그리고 Cpython에서 항상 작동한다는 보장은 없습니다. 다른 말로하면 ... 이것을하는 것은 나쁜 아이디어 ID입니다. 그러나, 당신이해야하는 경우 :

globals()['a']='foo' 
print(a) #prints foo 

A 본 단지 사전을 사용하는 것입니다 할 수있는 더 나은 방법입니다.

def GenerateArray(pers): 
    d={} 
    for item in pers: 
     d['newtest30' + str(item)] = [] 

    return d 

그런 다음 당신은을 통해 목록을 얻을 수 있습니다 :

d=GenerateArray([1,2,3]) 
test301=d['newtest301'] 

이것은 당신이 당신의 테스트를 통해 당신이 동적으로 명명 된 경우는이었을 것보다 훨씬 쉽게 반복 할 수있는 장점이있다. (예를 들어, 당신은 어떻게 당신이 창조하신 얼마나 많은 newtest의 알아?)

+0

내가 뭘하려고했는지 몰랐는데 그런 나쁜 생각이지만 이것은 완벽하게 감사했습니다! – Rtrader

0

당신은 확실히 동적라는 이름의 변수를 원하지 않는 :

은 당신이 할 수있는 것은 사용 그 (TM) 명확한 나쁜 생각입니다 같은 dict 무엇인가 : 당신은 자신이 일을 찾을 경우

from itertools import product 

def generate_arrays(pers): 
    blah = [ 
     'newtest30', 
     'newtest60' 
     # etc... 
    ] 
    my_dict = dict(('{}{}'.format(a, b), list()) for a, b in product(blah, pers)) 
    return my_dict 

는하지만, 그것은 아마 설계 결함입니다.

관련 문제