def f(p):
z=len(p)
for y in range(0,z):
if "t" in p[y]:
print(p[y])
return
list = ["titan","ton", "automatic","manual"]
f(list)
该函数应该从列表中删除以字母“t”开头的所有单词。然后该函数返回该列表。这个函数只返回一个包含所有单词的列表。
答案 0 :(得分:6)
你的问题有两个:
但是,你不需要一个对这项工作来说很重要的功能。只需使用list comprehension过滤掉这些项目:
>>> lst = ["titan","ton", "automatic","manual"]
>>> def func(lst):
... # You could also do `[x for x in lst if not x.lower().startswith("t")]`
... # which will also capture words starting with "T"
... return [x for x in lst if not x.startswith("t")]
...
>>> # Reassign 'lst' to the cleaned list
>>> lst = func(lst)
>>> lst
['automatic', 'manual']
>>>
答案 1 :(得分:6)
你的函数返回None
,虽然它打印出所有带有"t"
的单词。你想要的是像
def f(p):
no_ts = []
for el in p:
if not el.startswith("t"):
no_ts.append(el)
return no_ts
可以使用列表理解轻松完成
[el for el in p if not el.lower().startswith("t")]
# .lower() makes sure to catch words that start with "T"
此外,最好不要通过使用保留名称(如“list”或“str”)命名变量来混淆命名空间。
答案 2 :(得分:1)
你根本没有返回一个列表,你只是打印它的项目。
其次,不需要使用索引来迭代列表项,只需遍历列表本身。
的解决方案def f(p):
return [item for item in p if item.startswith('t')]
lis = ["titan","ton", "automatic","manual"]
new_lis = f(lis)
print(new_lis)
#['titan', 'ton']
您只需将print
来电替换为yield
并进行其他更改,即可让您的代码正常工作。使用yield
可使此功能成为generator function:
def f(p):
for item in p:
if item.startswith('t'):
yield item
...
>>> list(f(lis)) #call list on the generator expression returned by `f` to see its content
['titan', 'ton']
请注意,in
运算符用于子字符串匹配,因此:
>>> "t" in "automatic"
True
是True
,如果您只想查看第一个字符,请使用str.startswith
:
>>> "automatic".startswith('t')
False
答案 3 :(得分:1)
您可以使用过滤器:
>>> li=["titan","ton", "automatic","manual"]
>>> filter(lambda s: not s.startswith('t'), li)
['automatic', 'manual']