Python 迭代数组元素而不使用for循环

Python 迭代数组元素而不使用for循环,python,arrays,dataframe,Python,Arrays,Dataframe,我有一个数组,有一百万个正值或负值 A=[1.3,4,5,6.4,-0.3,-2,-----] 如果元素为负,我必须将值替换为0,如果元素为正,则必须将值替换为1 我不想把它用于循环,因为它需要很多时间 这是我当前的代码: for i in range(len(arr)): if arr[i] > 0: arr[i] = 1 else: arr[i] = 0 您还可以使用和使用以下代码 arr = [1 if v > 0

我有一个数组,有一百万个正值或负值

A=[1.3,4,5,6.4,-0.3,-2,-----]
如果元素为负,我必须将值替换为0,如果元素为正,则必须将值替换为1

我不想把它用于循环,因为它需要很多时间

这是我当前的代码:

 for i in range(len(arr)):
     if arr[i] > 0:
         arr[i] = 1
     else:
         arr[i] = 0
您还可以使用和使用以下代码

arr = [1 if v > 0 else 0 for v in arr]

没有numpy的解决方案。而是

arr=[0如果a<0,则为0;对于a in-arr,则为1]

请提供一个循环。我不想将其用于循环,因为这需要很多时间。可能有一些方法可以加快代码速度,但无法避免循环。
dataframe
pandas
库中使用的数据结构的名称。它不在您的代码中。如果有的
,则有一个
循环
。这只是一种编写循环的“更酷”的方式。我邀请您向我们展示一个无循环的版本。不管怎样,都会有一个循环——例如,显式或隐藏在numpy函数中。即使没有循环(例如,通过将其转换为
numpy
数组),也会有循环,这并不意味着列表ComperExtension应该被视为一个非循环解决方案。@Aryerez虽然不是一个非循环解决方案,但它仍然应该有帮助,因为它速度更快,并且不使用库。如果您可以使用numpy作为一个额外的库,您应该使用它,因为这将是最快的解决方案,其中有一个
for
-有一个
循环。这只是一种写循环的“更酷”的方式。@Aryerez看看我发布的链接。列表理解比标准for循环快得多,因为该行只需要解释一次,而不是每次for循环到达时都需要解释it@UliSotschok在CPython中,列表理解更快,因为它们不必调用
append
函数,而是使用字节码指令list\u append。我不确定你所说的“只需要被interpredt一次”是什么意思,CPython被编译成字节码,循环中的字节码将在每次迭代中执行。您可以将它们与
dis.dis
进行比较,以检查为循环与列表理解生成的字节码,除了list\u APPEND而不是
APPEND
函数调用外,它们基本相同。
arr = [1 if v > 0 else 0 for v in arr]
arr = [0 if a < 0 else 1 for a in arr]