列表理解,如何将新元素附加到列表中?

xmd2e60i  于 2021-08-20  发布在  Java
关注(0)|答案(3)|浏览(299)

我正在做python评估,我需要一只手:(所以,任务是使用这个等式:10*x-5,只打印正数;任务的重点是使用列表理解,最后,我必须打印更新后的列表。我做了所有这些,但我不知道如何将更新的元素插入/附加到新列表中,所以下面是我所做的。。

lst =[]
Update_MyList = [lst.append(MyList[z])for z in range(len(MyList)) if (10*MyList[z]-5 > 0)]
Update_MyList.append(lst)
print(Update_MyList)

我得到的只是:[没有,没有,没有,没有,没有]

u0sqgete

u0sqgete1#

代码1

假设您的mylist为[1,-2,3],并且您希望在输出为负数时不打印任何内容。以下是代码1:

MyList = [1, -2, 3]

Update_MyList = [10*x-5 if (10*x-5 > 0) else None for x in MyList]

print(Update_MyList)

输出:

[5, None, 25]

编辑后

代码2

如果你不想 None 对于负值,只需删除 else None 部分下面是代码2:

MyList = [1, -2, 3]

Update_MyList = [10*x-5 if (10*x-5 > 0) for x in MyList]

print(Update_MyList)

输出:

[5, 25]

代码3

如果您使用的是python>=3.8,请使用以下代码避免两次计算10*x-5。下面是代码3:

MyList = [1, -2, 3]

Update_MyList = [y for x in MyList if (y := 10*x-5) > 0]

print(Update_MyList)

输出:

[5, 25]
41ik7eoe

41ik7eoe2#

下面是使用列表理解实现这一点的最简单方法。首先,创建函数值:

MyList1 = [10*x-5 for x in MyList]

然后过滤掉负值:

MyList2 = [v for v in Mylist1 if v >= 0]

这里我保留了零值,但是您也可以通过更改 v >= 0v > 0 .
尽管您可以根据自己的意愿将它们组合在一起,但它仍然可以正常工作。显然,您不希望对每个值多次计算10*x-5,但您可以创建 MyList2 直接如下:

MyList2 = [v for v in (10*x-5 for x in MyList) if v >= 0]

这基本上结合了两者,第一个现在作为一个生成器保留,它永远不会扩展到实际的列表中。同样,对于每个原始列表值,函数10x-5的求值不会超过一次。同样,你可以使用 v >= 0v > 0 取决于是否要包含或排除零。
如果您愿意使过滤条件取决于特定函数10
x-5,您可以执行以下操作:

MyList2 = [v for x, v in enumerate(MyList) if v >= 0.5]

这将适用于浮点值,如0.1、0.6等。如果要排除零,可以使用 v > 0.5 . 事实上,我不喜欢这个解决方案,也不喜欢上一个,因为(1)它非常特定于函数10*x-5,(2)它使用浮点,这在0.5中是安全的,但通常不希望用于精确比较。

ecfsfe2w

ecfsfe2w3#

所以我想出来了:)

Update_MyList = [10*MyList[z]-5 for z in range(len(MyList)) if (MyList[z] > 0)]
print(Update_MyList)

相关问题