2016-10-04 3 views
1

list comprehension을 사용하여 다음을 수행하는 방법이 있습니까? 아니면 이것을 달성하기위한 더 파이썬적인 방법이 있습니까?목록 이해력을 사용하여 작업을 수행하는 방법

count = 0 
x = 'uewoiquewqoiuinkcnsjk' 
for letter in x: 
    if letter in ['a', 'e', 'i', 'o', 'u']: 
     count += 1 

최고의 프로그래밍 실습을 배우려고하십니까?

답변

4

는 발전기와 sum를 사용할 수있는 True 또는 FalseTrue1Falsecan reliably be used0 생성 t 할 수있는 좋은 방법 당신이 할 수있는 그래서

>>> x.translate(None, 'aeiou') 
wqwqnkcnsjk 

: 그는 반대이 문자열의 문자를 삭제 str.translate를 사용하는 모든 경우에

len(x)-len(x.translate(None, 'aeiou')) 

을, 대답은 10

+0

이것은 또한 좋습니다! 감사합니다, 필터를 사용할 생각인가요 – mangodreamz

+0

'sum'은 목록을 만들지 않기 때문에 좋습니다. – zvone

4

list_comprehension과 len 함수의 조합을 사용하십시오.

sum(c in 'aeiou' for c in x) 

또는 필터 + 렌 :

len(filter(lambda c: c in 'aeiou', x)) 

in 이후

>>> x = 'uewoiquewqoiuinkcnsjk' 
>>> len([i for i in x if i in 'aeiou']) 
10 
>>> 
+0

와우 이것이다 완벽 해요! 감사합니다 – mangodreamz

관련 문제