2009-11-19 7 views
0

문자열 목록 (예 : 'blah 1', 'blah 2' 'xyz fg', 'xyz penguin')이있는 경우 문자열의 고유 시작 위치를 찾는 가장 좋은 방법은 무엇입니까 ('xyz' 이런 경우에 ')? 문자열의 시작은 여러 단어가 될 수 있습니다. 당신은 문자열의 독특한 첫 번째 단어 (단어를 공백으로 구분되는)를 의미하는 경우고유 한 문자열 시작을 찾는 방법은 무엇입니까?

+8

문자열의 시작은 여러 단어가 될 수 있으므로 * "blah 2"는 개수가 1 인 문자열 시작입니다. 마찬가지로 "b"는 개수가 2 인 문자열 시작입니다. 더 정확해야합니다 문자열 시작에 대한 정의. –

+2

시작 부분을 끝내기위한 조건이 없으면이 질문에 답할 수 없습니다. 다중 단어 시작 부분이 언제 끝나는 지 어떻게 결정합니까? –

+1

- 목록에 'blat'이 포함되어 있으면 출력물을 원하는 내용은 무엇입니까? 'bla'와 'blah'? 그냥 'bla'? 그냥 'ㅋㅋ'? 왜 'b', 'bl', 'bla'도 아닌 첫 번째 이유는 무엇입니까? 다른 사람들이 요구 사항을 강화할 필요가 있다고 말한 것처럼 – robince

답변

2

이는 다음과 같습니다

arr=['blah 1', 'blah 2' 'xyz fg','xyz penguin'] 
unique=list(set([x.split(' ')[0] for x in arr])) 
4

귀하의 질문은 혼란, 당신이 정말 원하는 것을 명확하지 않다있다. 그래서 나는 세 가지 대답을주고 그들 중 하나가 적어도 부분적으로 당신의 질문에 대답하기를 바랍니다.

  1. 문자열의 주어진 목록의 모든 고유의 접두사를 얻으려면, 당신은 할 수 있습니다 :

    >>> l = ['blah 1', 'blah 2', 'xyz fg', 'xyz penguin'] 
    >>> set(s[:i] for s in l for i in range(len(s) + 1)) 
    {'', 'xyz pe', 'xyz penguin', 'b', 'xyz fg', 'xyz peng', 'xyz pengui', 'bl', 'blah 2', 'blah 1', 'blah', 'xyz f', 'xy', 'xyz pengu', 'xyz p', 'x', 'blah ', 'xyz pen', 'bla', 'xyz', 'xyz '} 
    

    이 코드는리스트에있는 모든 문자열의 모든 초기 slices을 생성하고 set 이러한 전달 중복을 제거합니다.

  2. 이 전체 문자열에 비해 시퀀스 작은 모든 큰 초기 단어를 얻으려면, 당신은 함께 갈 수 :이 코드는 splitting 설정 만듭니다

    >>> l = ['a b', 'a c', 'a b c', 'b c'] 
    >>> set(s.rsplit(' ', 1)[0] for s in l) 
    {'a', 'a b', 'b'} 
    

    모든 오른쪽 공간에서 문자열, 사용 가능한 경우 (그렇지 않으면 while 문자열 이됩니다. 한편

  3. , 전체 문자열을 고려하지 않고 모든 고유의 초기 단어 시퀀스를 얻기 위해, 당신은 갈 수에 대한 :

    >>> l = ['a b', 'a c', 'a b c', 'b c'] 
    >>> set(' '.join(w[:i]) for s in l for w in (s.split(),) for i in range(len(w))) 
    {'', 'a', 'b', 'a b'} 
    
    공백에

    이 코드 splits 각 단어와 concatenates 모든 초기 가장 큰 것을 제외한 결과 목록의 조각. 이 코드에는 함정이 있습니다. 탭을 공백으로 변환하십시오. 이것은 귀하의 경우에 문제가 될 수도 있고 아닐 수도 있습니다.

+0

downvote에 감사드립니다. 정교한 케어? – Stephan202

+0

+1 (신비한 질문에 대한 좋은 답처럼 보입니다) – robince

관련 문제