我有以下列表 - 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个地方,我想要判断陈述
答案 0 :(得分:2)
听起来你想在牌子改变时做点什么。我将假设它有一些名为f
的函数。因此,从广义上讲,我们希望代码看起来像(调用您的列表l
):
for x in l:
if (the sign changed at x):
f()
标志改变意味着什么?好吧,l[i] > 0
和l[i-1]
&lt; 0,反之亦然,当其中一个数字为0
时,您必须决定该怎么做。因此,假设您编写了一个名为sign_change(x,y)
的函数,当True
和x
的符号不同时会返回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