Python:如何循环列表并附加到新列表

Posted

技术标签:

【中文标题】Python:如何循环列表并附加到新列表【英文标题】:Python: How to For Loop a list and append to new list 【发布时间】:2019-04-13 05:58:02 【问题描述】:

练习我的蟒蛇。

任务: 遍历列表 A 并创建一个新列表,其中仅包含 0-5 之间的列表 A 中的项目。

我做错了什么

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] 作为答案。

【问题讨论】:

new = [] 移动到你的 for 循环之前 【参考方案1】:

只是一个建议!

    空列表在For循环内,意味着每次迭代都会创建一个新的空列表

    'return' 也在 for 循环内,它不太理想,您希望在循环耗尽并附加所有合适的元素后返回它。

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

【讨论】:

【参考方案2】:

你的 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(x[item])
    return new


print new_list(a)

您可以使用列表推导式获得相同的结果

def new_list(x):
    return [item for item in x if 0 < item < 5]

【讨论】:

您附加的是索引,而不是列表元素。 item 是此代码中的索引。此代码输出 [1, 3, 4]4 甚至不在列表中。 @timgeb 你是对的。编辑以反映更正【参考方案3】:

只是我的建议。您可以在此处使用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)

Filter 返回一个新列表,其中包含传递给定谓词的元素,它等效于

[item for item in iterable if function(item)]

根据文档。

因此

print new_list(a)

结果:

[1, 2, 3, 5]

这样您可以检查任何值,例如:

print new_list(a, 5, 10)
[5, 8]

【讨论】:

【参考方案4】:

您每次通过循环都将new 重置为一个全新的空列表,这会丢弃之前迭代中完成的所有工作。

另外,在if 语句中,您调用return,它会立即退出您的函数,因此您永远不会处理列表的其余部分。

你可能想要这样的东西:

def new_list(x):
    new = []
    for item in x:
        if 0 < item < 5:
            new.append(item)
    return new

【讨论】:

【参考方案5】:

三个错误:

    您将在 for 循环的每次迭代中重新实例化 new。 您应该在列表构建完成后,在函数结束时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 &lt; item &lt; 5。 考虑一个列表理解。

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

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

【讨论】:

以上是关于Python:如何循环列表并附加到新列表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用循环将带有来自 googlesearch 的链接的列表附加到另一个列表?

python把列表前几个元素提取到新列表

Python for 循环仅将最后一个列表作为值附加

反转附加列表或预先添加列表更便宜吗? - Python

将现有的项目列表附加到新列表

无法将条件结果附加到新列表