python
  • string
  • list
  • list-comprehension
  • 2017-10-30 4 views 0 likes 
    0
    hidden_word = "" 
    for c in word: 
        hidden_word += c if c in guesses else'-' 
    return hidden_word 
    

    목록 이해를 사용하여 한 줄의 코드에서이 작업을 수행하려고하지만 if-else 조건을 얻는 데 문제가 발생하여 누락되었다고 생각합니다. 어떤 것. 기본적으로 word = 'yes'이고 추측에 'e'가 포함되면 결과는 '-e-'이어야합니다. 나는 적절하게 글자를 넣을 수 있지만 글자가 추측에 있지 않다면 '-'을 넣는 논리에 문제가있다.if else 조건을 사용하여 파이썬 문자열 목록을 나열하십시오.

    +0

    이 작동합니다, 당신은 어떤 문제가 있습니까? – salparadise

    +0

    'hidden_word = ''.join (c는 다른 경우에는 'c'를, 'c'는'word ')'. – ekhumoro

    답변

    4

    코드가 괜찮다고 생각합니다. 왜 목록 이해력을 사용하고 (그리고 그것을 다시 문자열로 변환합니까?)

    hidden_word = ''.join([c if c in guesses else '-' for c in word]) 
    

    정말 더 좋습니까? 당신은 ... 여전히 발전기 표현을 변경할 수 있지만 수

    hidden_word = ''.join(c if c in guesses else '-' for c in word) 
    

    편집 : 테스트를 사용하여이 1000 문자 "단어"로 :

    import timeit 
    setup = """import random 
    chars = "abcdefghijklmnopqrstuvwxyz" 
    s = "".join(random.choice(chars) for _ in range(1000)) 
    guesses = "agjoxwz" 
    """ 
    
    t1 = "hidden_word = ''.join([c if c in guesses else '-' for c in s])" 
    t2 = "hidden_word = ''.join(c if c in guesses else '-' for c in s)" 
    t3 = """hidden_word = "" 
    for c in s: 
        hidden_word += c if c in guesses else '-'""" 
    

    결과 :

    In [24]: timeit.timeit(setup=setup, stmt=t1) 
    Out[24]: 100.88796829901968 
    
    In [25]: timeit.timeit(setup=setup, stmt=t2) 
    Out[25]: 147.86355467070305 
    
    In [26]: timeit.timeit(setup=setup, stmt=t3) 
    Out[26]: 247.9441536138757 
    

    우와. 따라서 목록 이해는 실제로 더 빨라야합니다 (그리고 발전기 표현보다 낫습니다). "단어"당 50 문자로

    , 차이가 덜 뚜렷하지만, 지능형리스트는 여전히 승리 :

    In [28]: timeit.timeit(setup=setup, stmt=t1) 
    Out[28]: 5.416419290962722 
    
    In [29]: timeit.timeit(setup=setup, stmt=t2) 
    Out[29]: 7.828715333297168 
    
    In [30]: timeit.timeit(setup=setup, stmt=t3) 
    Out[30]: 7.984714775332918 
    
    +0

    문자열이 길다면이 같은 루프에서 문자열 연결에'+'/'+ ='를 사용하면 비효율적 일 수 있습니다. 그것이 시퀀스에서''join()을 선호하는 이유 중 하나이다. 아마도 문자열이 짧고 성능이 문제가되지 않을 수 있습니다.이 경우 더 읽기 쉬운 솔루션이 더 좋습니다. – mhawke

    +0

    @mhawke : 최근의 Python 버전에서 문자열 "adding"가 훨씬 더 효율적으로되고,'''join()' '의 속도 이점이 사라진 것을 기억합니다. 그러나 나는 이것을 시험 할 필요가있다. –

    +0

    @mhawke : 나는 틀 렸습니다. 긴 문자열에서는 추가 작업이 훨씬 어려워졌습니다. 감사! –

     관련 문제

    • 관련 문제 없음^_^