2012-10-30 115 views
0

我在Python中有一個代碼,並且想要在字符串中找到元音。 我寫的代碼如下....我嘗試了使用For-Loop的不同組合,但它引發了兩個不同的錯誤;如何在字符串中查找特殊字符

  1. 「廉政」對象不是可迭代,
  2. 串指數必須是整數,不能海峽。

我怎樣才能找到一行中的所有元音?

str1 = 'sator arepo tenet opera rotas' 
vow1 = [str1[i] for i in str1 if str1[i] is 'a' | 'e' | 'o'] 

回答

7

怎麼樣:

vowels = [ c for c in str1 if c in 'aeo' ] 

你得到錯誤,因爲當您遍歷字符串,你循環遍歷字符串中的字符(不串指數),也因爲'a' | 'e' | 'o'對於字符串沒有意義 - (它們不支持|運營商)

>>> str1 = 'sator arepo tenet opera rotas' 
>>> vowels = [ c for c in str1 if c in 'aeo' ] 
>>> print vowels 
['a', 'o', 'a', 'e', 'o', 'e', 'e', 'o', 'e', 'a', 'o', 'a'] 

最後一條評論,您不應該使用is來測試等於is測試身份。一個簡單的測試:

a = 565 
b = 565 
print a == b #True 
print a is b #False (!) 

的原因是因爲ab參考具有相同值不同的對象。

+0

不錯,但我可能會使用一組搜索元音:wanted_vowels = set('aeiouy'); c在seeking_vowels中。 「是」是針對None進行測試的好主意,但是對於其他測試來說是個壞主意。 – user1277476

+0

@ user1277476 - 對於非常小的集合,不太可能會看到'set'和高度優化的字符串實現之間的顯着差異 - 快速時間表示每個循環的差異小於0.007 usec。在這種情況下,我認爲可以使用'str .__ contains__'或者'set .__ contains__' - 無論哪個OP更容易閱讀/理解。 – mgilson

2

嘗試此代碼:

str1 = 'sator arepo tenet opera rotas' 
i=0 
vowl='' 
for char in str1: 
    if char in 'aeiouAEIOU': 
      vowl=vowl+char+',' 

vowl=vowl[:-1]  
print (vowl) 

的輸出是:

一個,O,A,E,O,E,E,O,E,A,O,A

0
In [1]: str1 = 'sator arepo tenet opera rotas' 
In [2]: filter(lambda x: x in 'aeiou', str1) 
Out[2]: 'aoaeoeeoeaoa' 
相關問題