2013-05-17 1 views
-1

모듈 및 패키지를 참조하는 learnpython.org의 연습 문제에 빠져 있습니다.* Help * Learn Python Tutorial Modules and Packages

연습 문제 :이 연습에서는 re 모듈에 find라는 단어가 들어있는 모든 함수의 알파벳순 정렬 목록을 인쇄해야합니다.

강령은 내가 넣어 :

import re 
for x in dir(re): 
    if x[:4] == "find": 
     print x 

코드 출력 :

findall 
finditer 

예상 출력 :

['findall', 'finditer'] 

내가 뭘하려 후 :

import re 
for x in dir(re): 
    if x[:4] == "find": 
     print list(x) 
,

내가 가진 무엇 : 결과는 문자의리스트로 변환 list(x)를 사용하여 문자열이기 때문에

['f', 'i', 'n', 'd', 'a', 'l', 'l'] 
['f', 'i', 'n', 'd', 'i', 't', 'e', 'r'] 

... 난 무엇을 알아낼 수

답변

3

당신은 그 목록을 인쇄 할 list comprehension를 사용할 수 있습니다 x 문자열입니다 당신은 list(x)를 호출

import re 
print [x for x in dir(re) if x[:4] == "find"] 

. 즉 문자열을 문자 목록으로 변환 할 것이고 그 이유는 출력이 ['f', 'i', 'n', 'd', 'a', 'l', 'l'] 인 이유입니다. 아직 지능형리스트에 대해 읽어하지 않은 경우

당신은 할 수 있습니다뿐만 아니라 동일한 목록을 구축 할 것입니다

import re 
result = [] 
for x in dir(re): 
    if x[:4] == "find": 
     result.append(x) 
print result 

합니다. startswith() :

import re 
result = [] 
for x in dir(re): 
    if x.startswith("find"): 
     result.append(x) 
print result 
+0

을 포함하는 자체 모듈 그래도 주문하면 ... –

+2

'dir()'은 결과를 알파벳 순으로 반환하기 때문에 : http://docs.python.org/2/library/functions.html # dir –

+0

나는 정정되었다 - 나의 사과 - 나는 그것을 잊었다! –

4

를 도와주세요 - 대신 문자열을 얻으려면 x을 인쇄하십시오. 당신이 생각하고 싶은 것은 ... 그것을 정렬 한 다음 목록에 추가하고 sorted를 사용하여 발전기로 작성하고 주문할 수 있습니다

import re 
names = [] 
for name in dir(re): 
    if name[:4] == 'find': 
     names.append(name) 

names.sort() 
print names 

:

print sorted(name for name in dir(re) if name.startswith('find')) 

주 -로 Simeon Visser은 친절하게도 dir이 결과를 사전 정렬하므로 정렬 단계가 실제로 필요하지 않습니다.

0

나는 한동안 너무 당황했습니다. 내 생각의 기차는 RE보고에 의해 시작 (정규 표현식)의 분류에 결과가 보장되지 않습니다 잘 작동하는 다음과 같이 내가 사용하는 문자열 정규식 검색 기능 ...

import re 
mylist=[] 
for x in dir(re): 
    match = re.search('find', x) 
    if match: 
      mylist.append(x) 
print mylist