Python:如何进行循环列表并将其追加到新列表

时间:2018-11-09 16:21:54

标签: python list for-loop append

练习我的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]作为答案。

5 个答案:

答案 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)

三个错误:

  1. 您正在new循环的每次迭代中重新初始化for
  2. 在函数结束时,列表创建完成后,您应该return new
  3. 您要附加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]

建议:

  1. 不要编制索引,直接在x的项(for item in x: ...)上循环。
  2. 使用链式比较,例如0 < item < 5
  3. 考虑列表理解。

包含所有三个建议的代码:

>>> [item for item in a if 0 < item < 5]
>>> [1, 2, 3]

答案 4 :(得分:0)

只是一个建议!

  1. 空列表位于 For循环内部,这意味着每次迭代都会创建一个新的空列表

  2. 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))