不同的列表创建顺序会产生不同的结果

2024-09-29 05:23:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这两个版本来回答同一个问题:“制作一个新的列表,其中包含该列表中小于5的所有元素,并打印出这个新列表。”它们是相同的,但只是在行的顺序上不同,这行的结果不同。怎么会?提前谢谢!你知道吗

#Ver1
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
new_a = []
for element in a: 
    if element < 5:
       new_a.append(element)
       print(new_a)

#Ver2
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
for element in a: 
    if element < 5:
       new_a = []
       new_a.append(element)
       print(new_a)

Tags: in版本元素列表newforif顺序
3条回答

第二个版本每次遇到小于5的元素时,都会创建一个新的空new_a列表,从而有效地删除所有以前的条目。更有效的方法是使用列表理解

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

在第二个版本中,在每个迭代中设置listnew_a = []。将其设置为[],然后append元素。你知道吗

在第一个版本中,您将继续附加到上一个迭代。你知道吗

在#1中,您定义一个结果列表,然后按顺序附加到该列表。你知道吗

在#2中,为每个循环定义一个新的空列表。你知道吗

这样做的效果是,第二个解决方案不存储来自for循环的先前迭代的结果。你知道吗


有几种方法可以提高代码的可读性:

发生器功能

定义一个生成器函数并删除样板文件列表创建代码。你知道吗

def custom_filter(lst, i):
    for element in lst: 
        if element < i:
            yield element

res = list(custom_filter(a, 5))

理解力

您可以将此设置为惰性并迭代生成器:

res = (i for i in a if i < 5)

或者您可以使用列表:

res = [i for i in a if i < 5]

相关问题 更多 >