练习我的python。
任务: 遍历列表A并创建一个新列表,仅包含列表A之间介于0-5之间的项。
我在这里做什么错
a = [100, 1, 10, 2, 3, 5, 8, 13, 21, 34, 55, 98]
def new_list(x):
for item in range(len(x)):
new = []
if x[item] < 5 and x[item] > 0:
(new.append(item))
return new
print(new_list(a))
我只是得到[1]
作为答案。
答案 0 :(得分:3)
您的返回命令位于循环内部,因此,在遇到第一种情况时,它将立即返回退出函数的值。
以下是您的代码外观的示例
a = [100, 1, 10, 2, 3, 5, 8, 13, 21, 34, 55, 98]
def new_list(x):
new = []
for item in range(len(x)):
if x[item] < 5 and x[item] > 0:
new.append(x[item])
return new
print new_list(a)
您可以通过列表理解来获得相同的结果
def new_list(x):
return [item for item in x if 0 < item < 5]
答案 1 :(得分:2)
您每次通过循环都将new
重置为一个全新的空列表,这会丢弃先前迭代中完成的所有工作。
此外,在if
语句中,您正在调用return
,该语句会立即退出您的函数,因此您永远不会处理列表的其余部分。
您可能想要这样的东西:
def new_list(x):
new = []
for item in x:
if 0 < item < 5:
new.append(item)
return new
答案 2 :(得分:1)
只是我的建议。您可以在此处使用filter()而不是进行自己的循环。
a = [100, 1, 10, 2, 3, 5, 8, 13, 21, 34, 55, 98]
def new_list(x, low=0, high=5):
return filter(lambda f: f in range(low, high), x)
过滤器返回一个新列表,其中的元素将传递给定谓词,它等效于
[item for item in iterable if function(item)]
根据文档。
因此
print new_list(a)
结果:
[1, 2, 3, 5]
这样,您可以检查任何值,例如:
print new_list(a, 5, 10)
[5, 8]
答案 3 :(得分:0)
三个错误:
new
循环的每次迭代中重新初始化for
。return new
。item
,但这是您的索引。在您的代码中,您将必须附加x[item]
。具有更正的代码:
a = [100, 1, 10, 2, 3, 5, 8, 13, 21, 34, 55, 98]
def new_list(x):
new = []
for item in range(len(x)):
if x[item] < 5 and x[item] > 0:
new.append(x[item])
return new
print(new_list(a))
输出:
[1, 2, 3]
建议:
x
的项(for item in x: ...
)上循环。0 < item < 5
。包含所有三个建议的代码:
>>> [item for item in a if 0 < item < 5]
>>> [1, 2, 3]
答案 4 :(得分:0)
只是一个建议!
空列表位于 For循环内部,这意味着每次迭代都会创建一个新的空列表
for循环中的'return'也不太理想,您希望在循环用完并附加了所有合适的元素后将其返回。
a = [100, 1, 10, 2, 3, 5, 8, 13, 21, 34, 55, 98]
def new_list(x):
new = []
for item in range(len(x)):
if x[item] < 5 and x[item] > 0:
new.append(item)
return new
print(new_list(a))