mar*_*arc 1 python if-statement list
我有一个如下的单词列表:
old_list = ['houses','babies','cars','apples']
Run Code Online (Sandbox Code Playgroud)
我需要的输出是:
new_list = ['house','baby','car','apple']
Run Code Online (Sandbox Code Playgroud)
为了做到这一点,我提出了一个循环:
new_list1 = []
new_list2 = []
for word in old_list:
if word.endswith("ies"):
new_list1[:0] = [word.replace("ies","y")]
elif word.endswith("s"):
new_list2[:0] = [word.replace(' ','')[:-1]]
new_list = new_list1 + new_list2 # Order doesn't matter, but len(new_list) == len(old_list)
Run Code Online (Sandbox Code Playgroud)
它根本不起作用.我得到的东西是这样的:
new_list = ['baby','house','babie','car','apple']
Run Code Online (Sandbox Code Playgroud)
我确定我只是犯了一个简单的错误,但我看不到它.如果有一种简单的方法可以实现它,我会使用list.append().
谢谢!
这并没有直接解决你的问题(为什么你的尝试代码没有按预期工作)但我建议不要首先使用循环 - 相反,有一个专用函数来给出给定英语单词的单数形式,喜欢:
def singular(word):
# ...
return singularForm
Run Code Online (Sandbox Code Playgroud)
然后使用列表理解
new_list = [singular(word) for word in old_list]
Run Code Online (Sandbox Code Playgroud)
它更短,恕我直言很好地传达你所做的事情:获得每个单词的单数形式,old_list而不是谈论它是如何完成的(通过循环遍历列表).
首先,word.replace("ies","y")这不是一个好主意; 有时你可以在单词的中间找到它,例如diesel
new_list = []
for word in old_list:
if word.endswith("s"):
if word.endswith("ies"):
new_list.append(word[:-3] + "y")
else:
new_list.append(word[:-1])
Run Code Online (Sandbox Code Playgroud)