문자열 'Hello World'가 있다고 가정하고 사전을 사용하여 요소와 해당 빈도의 매핑을 얻으려는 경우이 다음 코드로 충분하지만 사용하려면 목록 이해력, 어떻게 'if', 'else'를 사용할 수 있습니까? 솔루션주십시오if-else를 간결한 목록 이해력으로 변환
for i in s:
if i in d:
d[i]=d[i]+1
else:
d[i]=1
문자열 'Hello World'가 있다고 가정하고 사전을 사용하여 요소와 해당 빈도의 매핑을 얻으려는 경우이 다음 코드로 충분하지만 사용하려면 목록 이해력, 어떻게 'if', 'else'를 사용할 수 있습니까? 솔루션주십시오if-else를 간결한 목록 이해력으로 변환
for i in s:
if i in d:
d[i]=d[i]+1
else:
d[i]=1
당신은 (사전 구축 지능형리스트를 사용하는 것이 이해가되지 않습니다) 사전 이해를 사용할 수 있습니다
s = 'Hello world'
d = {char: s.count(char) for char in set(s)}
set(s)
은 고유의 집합입니다 문자를 키로 사용하고 이해 횟수 (str.count
사용)를 값으로 사용하여 사전을 만듭니다.
하지만 이해할 필요는 전혀 없습니다. 파이썬에는 "배터리 포함"이 있습니다. 이 경우 배터리가 collections.Counter
입니다 :
import collections
collections.Counter(s)
경우
당신이 정말 지능형리스트 사용하려면 (내 개인적인 견해! 그렇지 및 안를) 당신이 작업에 필요한 예를 들면 부작용 : d[i] = 1
또는 d[i] = d[i] + 1
가 할당되어 있으므로 지능형에서 금지 때문에
s = 'Hello world'
d = {}
[d.__setitem__(i, d[i]+1) if i in d else d.__setitem__(i, 1) for i in s]
print(d)
__setitem__
호출이 필요하다. 그러나 __setitem__
이 기능 대체품입니다.
On point! 목록 이해력에서 if-else 처리에 대한 견해를 제공 할 수 있습니까? –
@AshwinV "if"및 "else"로 목록 이해력 예제를 추가했습니다. 그것은 당신의 루프와 같지만 부작용을 기반으로합니다. 그것은 지적인 운동으로 재미 있지만 정상적으로 부작용 때문에 이해를해서는 안됩니다. – MSeifert
물론 - 여기에있는 목록 comp는 너무 많은 레벨에서 잘못되었습니다 ... 그러지 마세요 :) –
더욱 간결하게 :'collections.Counter' 또는'collections.defaultdict (int) '사용 –
입력 요소에서 목록을 작성하지 않습니다. 당신은 ** 당신의 요소를 세고 있습니다 **. 'Counter()'를 사용하십시오. –
목록 해석으로도 변환하는 방법을 찾고 있습니다. 해결책을 제공해주십시오. 나중에 대안을 볼 수 있습니다. –