2013-11-28 4 views
0

나는 사용자 정의 클래스의 객체로 구성된 목록, 예컨대 :목록에있는 개체에서 값을 수집

class myClass: 
    pass 

myList=[] 

for i in range(100): 
    myObj=myClass() 
    myObj.prop1=i 
    myObj.prop2=i*i 
    myList.append(myObj) 

가 지금은 별도의 목록에 이러한 개체의 특정 재산의 모든 값을 수집 할있다; 지금 당장이 방법을 사용합니다 :

myValuesList = [] 
for obj in myList: myValuesList.append(obj.prop1) 

더 좋고/더 빠른 방법이 있습니까? maplambda과 관련이 있나요?

답변

1

List comprehensions tend to be faster : map

myValueList = [obj.prop1 for obj in myList] 

operator.attrgetter 빠르게 결과 :

유사하게 제 1 루프는 LC로 대체 될 수
myValueList = map(operator.attrgetter('prop1'), myList) # use list(map(...)) in python3.x 
+0

너무 OP가 myClass' '에서'__init__' 방법을 정의 할 수 있다면 . –

+0

감사합니다! 그러나 두 번째 변형은 아직 명확하지 않습니다. myValueList = list (map (operator1.attrgetter ('prop1'), myList))'(나는 Python 3을 사용 중이다.)'NameError : name '연산자'가 정의되지 않았습니다. ' –

+0

@VasilyA :'import operator' – inspectorG4dget

관련 문제