列表中的辅音删除

时间:2012-10-29 22:11:59

标签: python string

我正在处理一个接收输入字符串(st)和字符(ch)的函数。字符串st可以包含字母,数字和符号。该函数应返回一个新字符串,该字符串具有与原始字符串相同的元音(任何'aeiou'或'AEIOU'),并且与st中的位置相同,而对于其他位置,它应具有符号' $',但只包括这些字符,直到并且不包括字符ch的第一次出现(即使ch是元音)。 (返回的字符串可能比原始字符串短,也可能是空字符串。)

我已将字符串转换为列表,以便将不是元音的字符更改为符号'$',但我不明白如何进行此更改。这是我尝试过的,

def vowels_or_not (st, ch)
    newst=list(st)
    n= st.find('ch')
    nt=n+1
    sign='$'
    con=list('bcdfghjklmnpqrstvwxyz')
    for con in newst:
        del con
        del newst[nt:]    
    return sign.join(newst)

但它不起作用。

我该怎么做?

4 个答案:

答案 0 :(得分:2)

一种不那么“循环”的方法:

def vowels_or_not(string, char):
    left, mid, right = string.partition(char)
    # left is now a string with everything BEFORE the first occurence of char

    left = [(c if (c.lower() in "aeiou") else '$')
            for c in left]
    # left is now a list of all characters in the original left with vowels 
    # replaced with $

    return ''.join(left)

print vowels_or_not('abcdefghijklmno', 'i') 
# => a$$$e$$$

答案 1 :(得分:0)

你想选择一个不同的变量来迭代for循环,比如说:con,然后对于辅佐列表,比如说cons。我选择了这两个名字,因为它们通过复数形式有一些含义,暗示它是一个列表而不是单个元素。如果您选择相同的变量,则重新定义的con将等于字符串中的此元素,而不是辅音列表。

答案 2 :(得分:0)

一种简单的方法:

def func(st,ch):
   con='bcdfghjklmnpqrstvwxyz'
   vow="aeiou"
   sign="$"
   ans=""
   for x in st:
       if x !=ch:
           if x in con:
              ans+="$"
           else:
              ans+=x   
       else:
           break
   return ans

print func("abcdeefhkfgosdmvnsvh","k")
print func("adbfkjsdbksdbv","a")
print func("iduskjfhdrsqksd","j")

<强>输出:

a$$$ee$$

i$u$$

答案 3 :(得分:0)

itertools是你的朋友。

使用itertool函数,它变成了一个简单的oneliner,甚至不值得一个函数。

st = "printing until k and not over"
ch = "k"

from itertools import takewhile
"".join( c if c in 'aeiouAEIOU' else '$' for c in takewhile(lambda k: k!=ch,st) )

当字符与给定字符不同时,它会通过字符串,如果不是元音,则替换迭代字符。