如何使用python识别列表序列中的第一个符号更改

时间:2018-04-21 01:00:35

标签: python list numpy

我有以下列表 - python

[1,3,2,3,5,-6,-3,-4,-3,-5,6,7,8,9,10-,-6,-4,-5,-8 < / p>

我想在第一次反击正面或负面时采取判断陈述

前-6,6和-6所有3个地方,我想要判断陈述

2 个答案:

答案 0 :(得分:2)

听起来你想在牌子改变时做点什么。我将假设它有一些名为f的函数。因此,从广义上讲,我们希望代码看起来像(调用您的列表l):

for x in l:
    if (the sign changed at x):
        f()

标志改变意味着什么?好吧,l[i] > 0l[i-1]&lt; 0,反之亦然,当其中一个数字为0时,您必须决定该怎么做。因此,假设您编写了一个名为sign_change(x,y)的函数,当Truex的符号不同时会返回y,而当False的符号相同时会返回1,..., len(l)-1

请注意,这并不完全符合上面的伪代码 - 我们需要访问当前元素和前一个元素。因此,不是迭代列表,而是从for i in range(1, len(l) - 1): if sign_change(l[i], l[i-1]): f() 迭代索引。这给了我们:

0

我们必须从1开始迭代,因为l[-1]之前没有任何内容。 (事实上​​,f将为我们提供列表中的 last 元素。)

现在您只需撰写sign_change和{{1}}。

答案 1 :(得分:1)

这个检测符号变化并返回其符号发生变化的数字:

lst =[1,3,2,3,5,-6,-3,-4,-3,-5,6,7,8,9,-6,-4,-5,-8]
print(' '.join([str(y) for x, y in zip(lst, lst[1:]) if (x ^ y) < 0]))
# -6 6 -6

如果您想要改变符号的次数:

lst =[1,3,2,3,5,-6,-3,-4,-3,-5,6,7,8,9,-6,-4,-5,-8]
print(len([str(y) for x, y in zip(lst, lst[1:]) if (x ^ y) < 0]))
# 3