检测数组中的符号变化[关闭]

Posted

技术标签:

【中文标题】检测数组中的符号变化[关闭]【英文标题】:Detect sign changes in an array [closed] 【发布时间】:2020-12-09 23:02:12 【问题描述】:

当数值从正变为负时,我需要下订单,例如(打印“sell”), 例如,当它们从负数变为正数时(打印“购买”)。对于没有符号变化的索引,我想打印“ok”。

我应该如何用 python 编写代码?


输入示例

list = [ 1, 2, 6, -3, -2, -5, 6, 7, 1, -1, -3] 

前三个值(1、2、6)是正值,但是当它变成负值时,我想print('sell')

而对于-3、-2、-5,都有负数,当变成正数时,我要print('buy')

否则,(当值保持相同符号时)print('ok')

示例输出

ok ok ok sell ok ok buy ok ok sell ok 

【问题讨论】:

我们希望您的问题是独立的。将示例作为问题的一部分发布。不接受站外链接;不接受文字图片。 @Prune 您的评论中有多余的空间。你熟悉Is it always a good idea to demand the OP “post some code”?吗?最小的可重复示例对调试问题有用,而不是操作问题。 【参考方案1】:

这是一个解决您的问题/示例的简单代码:

l = [ 1, 2, 6, -3, -2, -5, 6, 7, 1, -1, -3]
for i in range(0, len(l)-1):
    p = l[i] * l[i+1]
    if p > 0:
        print('ok')
    elif l[i+1] < 0:
        print('sell')
    else:
        print('buy')

如果您想在数据框中添加一个新列,这就是您的示例:

d = 'col1': range(11), 'col2': [ 1, 2, 6, -3, -2, -5, 6, 7, 1, -1, -3]
df = pd.DataFrame(data=d)
df['shift_col'] = df.col2.shift(-1)

df
col1    col2    shift_col
0   0   1   2.0
1   1   2   6.0
2   2   6   -3.0
3   3   -3  -2.0
4   4   -2  -5.0
5   5   -5  6.0
6   6   6   7.0
7   7   7   1.0
8   8   1   -1.0
9   9   -1  -3.0
10  10  -3  NaN

这是我们前面例子中的一个简单函数:

def compare(line):
    p = line.col2 * line.shift_col
    if p > 0:
        return 'ok'
    elif line.shift_col < 0:
        return 'sell'
    else:
        return 'buy'
        
df['order'] = df.apply(compare, axis=1)

最后,这将是结果:

col1    col2    shift_col   order
0   0   1   2.0 ok
1   1   2   6.0 ok
2   2   6   -3.0    sell
3   3   -3  -2.0    ok
4   4   -2  -5.0    ok
5   5   -5  6.0 buy
6   6   6   7.0 ok
7   7   7   1.0 ok
8   8   1   -1.0    sell
9   9   -1  -3.0    ok
10  10  -3  NaN buy

【讨论】:

我想这就是我想要的,我会检查并查看输出,谢谢 谢谢,你的代码非常适合列表,你能帮我做和熊猫一样的事情吗,ibb.co/bmvgtWq 请检查这张图片,我想创建一个名为“order”的新列,来自 raw.MACDline 我在上面编辑了我的回复 非常感谢'habibi',你真是太棒了,我刚刚添加了这一行——df['shift_plus'] = df.order.shift(1)——完全正确。 我可以在第二天问你有什么问题吗?我刚开始 1 个月前,我是初学者。【参考方案2】:

在您的情况下,它是您想要的简单布尔值 (True/False),通过将列表转换为 numpy 数组很容易从列表中获取。

import numpy as np

my_list = [ 1, 2, 6, -3, -2, -5, 6, 7, 1, -1, -3] 

my_array = np.array(my_list) # convert list to numpy array

print(my_array >= 0)

如果您想将结果映射到特定文本,您可以这样映射:

def mapping(n):
    if n:
        return "ok"
    else:
        return "sell"

print(list(map(mapping, my_array >= 0)))

【讨论】:

以上是关于检测数组中的符号变化[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

无符号字符数组转换为 long long [关闭]

Python OpenCV 线检测以检测图像中的“X”符号

vue中的$符号

如何检测二进制/库中的未定义符号?

如何使用 WinAPI 检测控制台中的符号?

为啥搜索引擎会忽略符号? [关闭]