如何在字符串中查找特殊字符

时间:2012-10-30 15:10:58

标签: python string for-loop

我有一个Python代码,想要在字符串中找到元音。 我写的代码如下....我尝试使用For-Loop的不同组合,但它会抛出两个不同的错误;

  1. 'int'对象不可迭代,
  2. 字符串索引必须是整数,而不是str。
  3. 如何找到一行中的所有元音?

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

3 个答案:

答案 0 :(得分:7)

怎么样:

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

你遇到错误,因为当你循环一个字符串时,你会遍历字符串中的字符(而不是字符串 indices ),因为'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引用具有相同值的不同对象。

答案 1 :(得分: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)

输出结果为:

  

a,o,a,e,o,e,e,o,e,a,o,a

答案 2 :(得分:0)

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