2014-03-06 2 views
0
word = "help" 
scrambled = ['p','e','h','l'] 

어떻게 단어와 동일한 순서로 배열할까요? 그래서 도움으로 pehl.문자열을 동일한 단어로 정렬

편집 1 :

this is for a hangman game, so it would go: 
guess 1: 
input = "p" 
scrambled = ['p'] 
guess 2: 
input = "e" 
scrambled = ['p','e'] 

등등. 정렬에 적절한 사용,

sorted(scrambled, key=word.index) 

또는 :

+0

'단어'를 문자 목록으로 나눌 수 있기 때문에 그 질문을 이해할 수 없습니다. –

+1

처음에는 '스크램블링'만 사용합니까? 왜'list (word)'를 사용할 수 없습니까? 다양한 새로운 단어를 생각해 내기 위해 글자를 재 배열해야합니까? 당신의 문제는 이해하기에 충분히 정의되지 않았습니다. –

+0

'word = "helpl"와 같은 경우도 있습니까? 스크램블 드 = [ 'p', 'e', ​​'l', 'h', 'l']'? ' –

답변

2

list(word) .. 가장 빠른 그것을

할 것입니다하지만 scrambled를 정렬하면 사용할 수

scrambled.sort(key=word.index) 

이것은 만 작동word에는 반복되는 문자가 없습니다. scrambled의 각 항목에 대해 word.index()이 호출되고 word에있는 각 문자의 색인이 반환되어 scrambled 목록을 정렬하는 데 사용됩니다.

데모 :

def make_sort_key(word): 
    indices = {} 
    for i, c in enumerate(word): 
     indices.setdefault(c, []).append(i) 
    def key(c): 
     return indices[c].pop() 
    return key 

sorted(scrambled, key=make_sort_key(word)) 

word에서 각 문자에 대한 인덱스를 사전 구축하고 이들를 반환

>>> word = "help" 
>>> scrambled = ['p','e','h','l'] 
>>> list(word) 
['h', 'e', 'l', 'p'] 
>>> sorted(scrambled, key=word.index) 
['h', 'e', 'l', 'p'] 

반복 문자를 들어, word 인덱스를 기반으로 키 기능을 구축 할 수 있습니다 scrambled 목록이 정렬됩니다.

데모 :이 문자 그대로 해석

>>> word = 'letters' 
>>> scrambled = ['s', 'e', 'l', 'r', 'e', 't', 't'] 
>>> def make_sort_key(word): 
...  indices = {} 
...  for i, c in enumerate(word): 
...   indices.setdefault(c, []).append(i) 
...  def key(c): 
...   return indices[c].pop() 
...  return key 
... 
>>> sorted(scrambled, key=make_sort_key(word)) 
['l', 'e', 't', 't', 'e', 'r', 's'] 
+0

Martijn이 어떻게 작동하는지 조금 설명해 주시겠습니까? – Tyler

+2

정렬 키를 사용하는 것이 좋습니다. 불쌍한 말로 반복되는 글자로 단어를 작동 시키려면 더 많은 노력이 필요합니다. –

+0

이 방법이 효과적 일 수 있습니다. 그러나 반복되는 문자로 단어가 있으면 어떻게해야합니까? 예를 들어 같은 편지. – Floofk

0

: 예를 들어

def make_key(word): 
    prev = {} 
    def key(c): 
     prev[c] = word.index(c, prev.get(c, -1) + 1) 
     return prev[c] 
    return key 

:

>>> word = 'lollipop' 
>>> scrambled = ['o', 'i', 'l', 'l', 'p', 'p', 'o', 'l'] 
>>> scrambled.sort(key=make_key(word)) 
>>> scrambled 
['l', 'o', 'l', 'l', 'i', 'p', 'o', 'p'] 
여기
>>> word = "help" 
>>> scrambled = ['p','e','h','l', 'p','e','h','l', ] 
>>> scrambled.sort(key=word.find) 
>>> scrambled 
['h', 'h', 'e', 'e', 'l', 'l', 'p', 'p'] 
0

반복 문자로 작동하는 솔루션입니다
관련 문제