Python 如何按元音和辅音对字符串背景词进行排序?
因此,我必须创建一个程序,重写一个字符串背景词,并交替使用元音和辅音,如本例所示:Python 如何按元音和辅音对字符串背景词进行排序?,python,string,list,for-loop,alternate,Python,String,List,For Loop,Alternate,因此,我必须创建一个程序,重写一个字符串背景词,并交替使用元音和辅音,如本例所示: ex_1: input -> 'abcdefi' output -> 'ifedacb' ex_2: input -> 'vblsdeloai' output ->'iladoselbv' 到目前为止我所做的: 我被困的地方 将最终列表转换为字符串 因此,我转换字符串backwords,而不是使用for来迭代每个字符,并将其与元音列表进行比较。如果在元音列表中,则将元音添加到新列表中
ex_1:
input -> 'abcdefi'
output -> 'ifedacb'
ex_2:
input -> 'vblsdeloai'
output ->'iladoselbv'
到目前为止我所做的:
我被困的地方
将最终列表转换为字符串
因此,我转换字符串backwords,而不是使用for来迭代每个字符,并将其与元音列表进行比较。如果在元音列表中,则将元音添加到新列表中,如果没有,则将元音添加到新列表中。
现在我被困在必须创建一个列表的部分,这个列表是由两个list-list-u元音和list-u辅音创建的。我现在不知道怎样才能使两者同时工作。zip函数使列表成为一个元组,我想我不能使用它。我是新来的,任何帮助都会很难受。如果你认为我可以用不同的方法解决这个问题,请随时告诉我我是编程新手,我现在不知道该怎么做。你需要
itertools.zip\u longest
来快速浏览两个列表,其中一个空字符串为fillvalue
:
''.join(map(lambda x: x[0] + x[1], zip_longest(list_vowels, list_consonants, fillvalue='')))
代码:
from itertools import zip_longest
word = input('the word is: ')
b = word[::-1]
list_vowels = []
list_consonants = []
final_list = []
string = ''
vowels = ['a', 'e','i','o','u']
for i in b:
if i in vowels:
list_vowels.append(i)
elif i not in vowels:
list_consonants.append(i)
print(''.join(map(lambda x: x[0] + x[1], zip_longest(list_vowels, list_consonants, fillvalue=''))))
你缺少的一行是把你的两个元音和辅音列表变成一个压缩字符串。您可以使用
itertools.zip\u longest()
实现这一点
这是您需要的线路:
从itertools导入zip\u
''.join(''.join(x)表示最长的zip中的x(list_元音,list_辅音,fillvalue='')
[1]中的:'vblsdeloai'
Out[1]:“iladoselbv”
zip_longest()
将它们交错听起来zip就是你想要的-只要通过调用list函数将它转换成一个列表:list(zip(list_元音,list_辅音))我想确认一下
abcdefi
应该变成ifedacb
对吗?您是否交换了最后2个字符?它是input->abcdefi then->ifedcba then->ifedacb如果没有更多的元音或辅音可供替换,则它会写入字符串的其余部分。是的,您是正确的,但是您编写了ifedabc
(请注意最后两个字符的顺序)。我只是想确定一下我编辑了ty,告诉我为什么迭代两次而不是循环和附加到两个不同的列表?暂且不提这一点,list(filter(lambda c:c在元音中,s))
真的比[c代表c在s中,如果c在元音中]
好吗?我只是喜欢一种更实用的编码风格。这样代码对我来说就更清晰了。我不反对人们使用更程序化的风格。这就是我。尼斯:)你是用函数式语言编程,还是只在支持范例的语言中坚持函数式风格?我不使用函数式语言本身。我学习和实践这种风格是出于兴趣。我对这种风格很感兴趣,无论它在哪里得到支持,除了在一些环境中,它在其他方面更有效,例如MicroPython。那么,你知道关于这个主题的好资源吗?(Python/非函数式语言中的函数式编程):)
for q in e
string = string + e
print (string)
''.join(map(lambda x: x[0] + x[1], zip_longest(list_vowels, list_consonants, fillvalue='')))
from itertools import zip_longest
word = input('the word is: ')
b = word[::-1]
list_vowels = []
list_consonants = []
final_list = []
string = ''
vowels = ['a', 'e','i','o','u']
for i in b:
if i in vowels:
list_vowels.append(i)
elif i not in vowels:
list_consonants.append(i)
print(''.join(map(lambda x: x[0] + x[1], zip_longest(list_vowels, list_consonants, fillvalue=''))))
from itertools import zip_longest
def split(s):
vowels = ['a', 'e', 'i', 'o', 'u']
return list(filter(lambda c: c in vowels, s)), \
list(filter(lambda c: c not in vowels, s))
def reverse_interleave(s):
vowels, consonants = list(map(reversed, split(s)))
return ''.join(
map(lambda x: ''.join(x),
zip_longest(vowels, consonants, fillvalue='')))
print(reverse_interleave('abcdefi'))
print(reverse_interleave('vblsdeloai'))