在Python中从字符串中删除辅音
这是我的密码。我不确定我是否需要一个计数器来工作。答案应该是在Python中从字符串中删除辅音,python,string,list,python-3.x,python-idle,Python,String,List,Python 3.x,Python Idle,这是我的密码。我不确定我是否需要一个计数器来工作。答案应该是'iii' def eliminate_consonants(x): vowels= ['a','e','i','o','u'] vowels_found = 0 for char in x: if char == vowels: print(char) eliminate_consonants('mississippi') 更正
'iii'
def eliminate_consonants(x):
vowels= ['a','e','i','o','u']
vowels_found = 0
for char in x:
if char == vowels:
print(char)
eliminate_consonants('mississippi')
更正代码
如果char==元音:行是错误的。如果元音中的字符:,则必须是。这是因为您需要检查元音列表中是否存在该特定字符。除此之外,您还需要print(char,end='')
(在python3中)将输出打印为iii
最后的节目将是
def eliminate_consonants(x):
vowels= ['a','e','i','o','u']
for char in x:
if char in vowels:
print(char,end = "")
eliminate_consonants('mississippi')
输出将是
iiii
其他方式包括
- 在
字符串中使用
语句if char in'aeiou'
检查字符串aeiou
中是否存在char
,看起来很简单
-
def eliminate_consonants(x):
for char in x:
if char in 'aeiou':
print(char,end = "")
''.join([c for c in x if c in 'aeiou'])
''.join(c for c in x if c in 'aeiou')
仅当字符位于aeiou
-
def eliminate_consonants(x):
for char in x:
if char in 'aeiou':
print(char,end = "")
''.join([c for c in x if c in 'aeiou'])
''.join(c for c in x if c in 'aeiou')
此gen exp将返回一个生成器,而仅当字符位于aeiou
-
def eliminate_consonants(x):
for char in x:
if char in 'aeiou':
print(char,end = "")
''.join([c for c in x if c in 'aeiou'])
''.join(c for c in x if c in 'aeiou')
您可以使用仅查找字符串中的元音。代码
re.findall(r'[aeiou]',"mississippi")
将返回在字符串中找到的元音列表,即['i','i','i','i']
。现在我们可以使用str.join
然后使用
''.join(re.findall(r'[aeiou]',"mississippi"))
- 和
对于这种技术,您需要存储一个映射,该映射将每个非元音匹配到
None
类型。为此,您可以使用。制作地图的代码是
str.maketrans({i:None for i in string.ascii_lowercase if i not in "aeiou"})
这将返回映射。务必将其存储在变量中(此处m
用于map)
这将从字符串中删除所有非aeiou
字符
- 使用
您可以将
dict.fromkeys
与一起使用。但请记住先导入系统
dict.fromkeys(i for i in range(sys.maxunicode+1) if chr(i) not in 'aeiou')
现在使用str.translate
'mississippi'.translate(m)
- 使用
如中所述,您可以使用
non_vowels = bytearray(set(range(0x100)) - set(b'aeiou'))
用这个我们可以翻译这个词
'mississippi'.encode('ascii', 'ignore').translate(None, non_vowels)
'mississippi'.encode('ascii', 'ignore').translate(None, non_vowels)
它将返回b'iii'
。通过使用decode
即b'iii.decode(“ascii”)
,可以很容易地将其转换为str
- 使用
bytes
返回bytes对象,是bytearray
的不可变版本。(它是特定于Python 3的)
用这个我们可以翻译这个词
'mississippi'.encode('ascii', 'ignore').translate(None, non_vowels)
'mississippi'.encode('ascii', 'ignore').translate(None, non_vowels)
它将返回b'iii'
。通过使用decode
即b'iii.decode(“ascii”)
,可以很容易地将其转换为str
定时比较
Python 3
时间是按顺序排列的
translate (bytes) | 2.88
translate (bytearray)| 3.06
List Comprehension | 53.2
Regular expressions | 57.0
Generator exp | 60.1
dict.fromkeys | 71.3
translate (unicode) | 71.6
translate (unicode) | 2.33
dict.fromkeys | 2.39
translate (bytes) | 4.17
translate (bytearray)| 4.21
List Comprehension | 86.6
Regular expressions | 74.3
Generator exp | 97.1
如您所见,使用字节的最后一种方法是最快的
Python 3.5
时间是按顺序排列的
translate (bytes) | 2.88
translate (bytearray)| 3.06
List Comprehension | 53.2
Regular expressions | 57.0
Generator exp | 60.1
dict.fromkeys | 71.3
translate (unicode) | 71.6
translate (unicode) | 2.33
dict.fromkeys | 2.39
translate (bytes) | 4.17
translate (bytearray)| 4.21
List Comprehension | 86.6
Regular expressions | 74.3
Generator exp | 97.1
=
测试是否相等。您正在查看列表“元音”中的字符串中是否存在任何字符。要做到这一点,只需在
中使用,如下所示
此外,我看到您有一个“元音”变量,但没有使用它。下面是一个如何解决此问题的示例:
def eliminate_consonants(x):
vowels= ['a','e','i','o','u']
vowels_found = 0
for char in x:
if char in vowels:
print(char)
vowels_found += 1
print "There are", vowels_found, "vowels in", x
eliminate_consonants('mississippi')
您的输出将是:
i
i
i
i
There are 4 vowels in mississippi
你可以试试像这样的肾盂疗法
In [1]: s = 'mississippi'
In [3]: [char for char in s if char in 'aeiou']
Out[3]: ['i', 'i', 'i', 'i']
功能
In [4]: def eliminate_consonants(x):
...: return ''.join(char for char in x if char in 'aeiou')
...:
In [5]: print(eliminate_consonants('mississippi'))
iiii
谢谢!:)感谢您的快速响应。:)请告诉我如何在Python 2.7中一行打印输出,因为:print(char,end=“”)
似乎只在Paython 3中有效。谢谢。@JoeRprint char,
在py2中(注意后面的逗号)元音\u found=0
是什么意思?如果需要速度;使用字节并通过testring调用。翻译(无,非元音)
充其量,这是一个注释,不是答案。错误!我更喜欢返回“”。加入([char for char in x if char in'aeiou'])
。直接易懂:)@BhargavRao建立中间列表既不必要,也成本高昂。您应该删除那些[]
。另一种选择是'.join(过滤器('aeiou.\uU包含\uU,s))
。我测试了一个1000万个小写字母的字符串,Bhargav的方法需要2.16秒,我的需要1.47秒,Bhargav没有创建中间列表需要1.25秒。@StefanPochmann感谢Buddy提供的信息。我会更新答案。@BhargavRao那里的更新也很好,但我的意思是你在这里的评论。只需使用'.join(char…'aeiou')
而不使用那些[]
。