2011-10-16 6 views
2

세트와리스트 모두에서 작동 할 수 있고 시퀀스의 수정 된 형식을 반환해야하는 함수가있는 경우 시퀀스 유형을 유지하지만 여전히 이해력을 사용하는 방법이 있습니까? ? 예를 들어, 다음과 같이 stripcommonpathprefix을 세트로 호출하면 작동하지만 세트를리스트로 변환하는 바람직하지 못한 부작용이 있습니다. 직접 isinstance을 확인하지 않고 유형을 유지하면서 (여전히 이해력을 사용하면서) 올바른 유형을 반환 할 수 있습니까? 그렇지 않다면, 이것을하는 가장 깨끗한 방법은 무엇입니까?파이썬에서 세트 또는리스트 이해에서 시퀀스 유형 유지하기

def commonpathprefix(seq): 

    return os.path.commonprefix(seq).rpartition(os.path.sep)[0] + os.path.sep 


def stripcommonpathprefix(seq): 

    prefix = commonpathprefix(seq) 
    prefixlen = len(prefix) 
    return prefix, [ p[prefixlen:] for p in seq ] 

감사합니다. 기본 질문 인 경우 죄송합니다. 파이썬을 배우기 시작했습니다.

P.S. 파이썬 3.2.2를 사용하고 있습니다.

+0

왜이 작업을 수행해야합니까? 좋은 이유를 정말로 생각할 수 없다 ... –

답변

5

시퀀스의 유형을 보존하는 좋은 방법은 없습니다. 당신이 짐작했듯이, 정말로 이것을하고 싶다면, 결국 대답을 원하는 유형으로 변환해야 할 것입니다. 당신이 이것을 할 필요가 없을 가능성이 높기 때문에 그것에 대해 열심히 생각해야합니다. 당신은 전환하기로 결정하는 경우 도움이 될

한 바로 가기 :

def strip_common_path_prefix(seq): 
    # blah blah 
    return prefix, type(seq)(result) 
0

없이이 작업을 수행 할 일반적인 방법은 없습니다 : 내장 된 시퀀스의 유형은 그 시퀀스를 생성 할 수 있습니다 생성자입니다 유형 검사. 또한 세트의 경우 집합 이해를 사용할 수 있습니다 : { p[prefixlen:] for p in seq }.

+0

파이썬 3이 목표이지만, 이것을보고있는 다른 누군가에게 생각 나게하기 위해, 세트 내포는 파이썬 3이다. 파이썬 2의 경우,'{...} '를'set (...)'로 바꾼다. (필자는 거기에 'Ellipsis'라는 문자가 있다는 것을 의미하지는 않으며, 파이썬 2의 문법에있는 항목 액세스에서만 유효합니다;) –

+0

아니요, 설정된 내포물은 Python 2.7 이상에서 사용할 수 있습니다. – refaim

+0

사과드립니다. 네가 옳아. –

관련 문제