2016-10-11 3 views
-1

에 단어 목록에 문자의 순서를 비교 (그래서 버튼의 내 순서가 여기에, 오래된 학교 문자 메시지를 생각 4266532)내가 특정 순서에있는 문자의 목록을 가지고 파이썬

letters = [['g', 'h', 'i'], ['a', 'b', 'c'], ['m', 'n', 'o'], ['m', 'n', 'o'], ['j', 'k', 'l'], ['d', 'e', 'f']] 

나는이 단어 목록과 비교하여 문자의 순서에 대해 얼마나 많은 일치하는 문장을보고 싶은 단어

words = ['i', 'am', 'an', 'old', 'man'] 

의 목록을 표시합니다.

예를 들어 글자의 순서 또는 '내가 옛날'

편집은 '내가 늙었'동일 수 : 나는 순서에 의해 무엇을 의미하는지 명확히하기 위해 여전히 대신 터치 버튼이 기존 휴대폰에

화면. 각 단추 (또는 번호)에는 문자가 붙어 있습니다. 예를 들어 숫자/버튼 '2'에는 문자가 ['a','b','c'] 첨부되어 있습니다. 숫자/버튼 '3'에는 문자 ['d,'e','f']이 붙어 있습니다.

from collections import Counter 
from itertools import combinations, chain 
letters = [['g', 'h', 'i'], ['a', 'b', 'c'], ['m', 'n', 'o'],['m', 'n', 'o'], ['j', 'k', 'l'], ['d', 'e', 'f']] 
allowed = set(chain.from_iterable(letters)) 
words = ['i', 'am', 'an', 'old', 'man'] 

for phrase in combinations(words, 3): 
    phrase_c = Counter(chain.from_iterable(phrase)) 
    if any((v > 1 and k not in "mno") or k not in allowed for k, v in phrase_c.items()): 
     continue 
    print(phrase) 

: 그래서 위에 내 letters 목록에 어떤 글자는 전체의 기준이 무엇인지 4266532

+0

데이터를 매우 쉽게 무차별 적으로 만들 수 있습니까? 또한 시퀀스로 간주되는 논리를 지정하지 않았습니다. 노인이라고 생각하고 '나는 노인'이라도 '남자'라고 생각하는 것을 고려하십니까? –

+0

그것은 대학 과제를위한 것입니다, 그래서 데이터는 제가 보여주고있는 것보다 훨씬 크지 않을 것입니다, 그들은 다른 단어 목록과 문자 순서에 대해 테스트 할 수 있습니다. 그러나 크기는 비슷할 것입니다. @PadraicCunningham – oneman

+0

결과는 항상 순서에 맞습니까, 즉'단어'개체에서? – enderland

답변

1

확실하지 밀어 화면에 있지만 목록 이후 나타날 수있는 당신이 뭔가를 할 수있는 작은 될거야 당신을 줄 것이다 :

('i', 'am', 'old') 
('i', 'an', 'old') 
('i', 'old', 'man') 

을 단어는 항상 당신이 if k not in "mno"

을 제거 할 수있는 문자의 부분 집합 인 경우
from collections import Counter 
from itertools import combinations, chain 

letters = [['g', 'h', 'i'], ['a', 'b', 'c'], ['m', 'n', 'o'], ['m', 'n', 'o'], ['j', 'k', 'l'], ['d', 'e', 'f']] 

words = ['i', 'am', 'an', 'old', 'man'] 

for phrase in combinations(words, 3): 
    for ind, letter in enumerate(chain.from_iterable(phrase)): 
     if ind >= len(letters) or letter not in letters[ind]: 
      break 
    else: 
     print(phrase) 

당신에게 줄 것이다 :

('i', 'am', 'old') 
('i', 'an', 'old') 

당신이 순서로해야하는 경우

다음은 문구에서 각 문자의 하위 집합 및 올바른 순서로 나타납니다 확인, 간단 문자 순서에 따라 단어를 정렬하고 세트의 문자가없는 단어를 필터링하면 복잡성을 상당히 줄일 수 있습니다. 예를 들어 6 문자로 된 문구를 만들 수 있다는 점도 고려할 수 있습니다. 즉, 4266532

+0

괜찮아요. 426653 문자 순서가 아니기 때문에 ('i', 'old', 'man') 출력이되어서는 안됩니다.또한 '수집품'이나 'itertools'를 본 적이 없으므로 꼭 읽어보아야 할 것입니다. 그러나 감사드립니다. 적어도 올바른 방향으로 나아가 야합니다. – oneman

+0

정확한 내용이어야합니다. 같은 순서? –

+0

http://imgur.com/a/bLHe0 – oneman

관련 문제