2011-09-16 2 views
2

: 그 단어의 길이를 참조하는 두 번째 목록을파이썬에서 목록을 동기화 할 수 있습니까? 나는 단어 목록이있는 경우 예를 들어

Words = ['A', 'list', 'of', 'words'] 

을하고 싶어요, 어떻게이를 수 있을까? 나는 같은 것을 할 수 있다는 것을 알고 있어요 :

Lengths = map(lambda w: len(w), Words) 
[1, 4, 2, 5] 

을하지만 난 계속 그 기능을 변경할 때마다 단어를 호출해야합니다. 귀하의 제안에

+0

클래스가 그렇게 할 수 있습니다. – Benjamin

+0

자세히 설명해 주시겠습니까? 저는 파이썬 초보자입니다. : p –

+0

그는 'list'의 하위 클래스를 사용해야 할 것 같아서'Words'를 변경할 때'Lengths'를 자동으로 업데이트 할 수 있다고 생각합니다. 귀하의 질문에 "이 일을하는 기본 방법이있다"는 대답은 아니오입니다. – agf

답변

4

당신은 클래스를 사용할 수 있습니다

class mywords: 
    def __init__(self, a): 
     self.words = a 
     self.length = map(lambda w: len(w), a) 
    def append(self, string): 
     self.words.append(string) 
     self.length.append(len(string)) 


a = mywords(['A', 'list', 'of', 'words']) 

a.append("this") 
print a.words 
print a.length 

그것은 내가 클래스를 처음 사용할 시간을, 그래서 더 좋은 방법이있을 수 있습니다. 그러나 이것은 잘 작동하는 것 같습니다. 삽입, 제거 등과 같은 다른 작업을위한 다른 메서드를 정의해야합니다.

+0

나는 이것이 효과가 있다고 생각한다. 고맙습니다! –

3

목록 이해가 빨리보고하기 위해 더 좋은 것 :

[len(word) for word in words] 

당신은 그래서 같은 DICT 이해를 사용할 수 있습니다

{word: len(word) for word in words} 

하지만 실제로는 더 우위가 없다 당신이 그것을 필요로 할 때 단어의 길이를 생성하는 것 이상. 필자가 자동으로 업데이트해야하는 경우 필자는 자신의 클래스를 작성하여 관리하는 것이 가장 좋습니다.

+0

내가 작업하고있는 컨텍스트에서 약간의 편리함이 있습니다. 단어 길이는 동기화 된 목록으로 수행하려고하는 것의 자리 표시 자일뿐입니다. 가능하지 않다면 큰 문제는 아니지만 제가 말한 것처럼 도움이 될 것입니다. –