我有一个从左到右阅读的数字列表.任何时候我在阅读序列时遇到符号更改我想要计算它.
X = [-3,2,7,-4,1,-1,1,6,-1,0,-2,1]
X = [-, +, +, -, +, -, +, +, -, -,-,+]
Run Code Online (Sandbox Code Playgroud)
因此,在此列表中有8个符号更改.
当Item [0](在这种情况下为-3)为负时,它被认为是符号变化.此外,还会考虑列表中的任何0 [-].
任何帮助将不胜感激.
Mar*_*ers 13
您可以使用itertools.groupby计数正数和非正数的组:
>>> x = [-3,2,7,-4,1,-1,1,6,-1,0,-2,1]
>>> import itertools
>>> len(list(itertools.groupby(x, lambda x: x > 0)))
Run Code Online (Sandbox Code Playgroud)
结果:
8
Run Code Online (Sandbox Code Playgroud)
在你的问题中,你说出你想要的:
您可以通过直接测试第一个元素并调整结果来完成此操作:
>>> len(list(itertools.groupby(x, lambda x: x > 0))) - (x[0] > 0)
Run Code Online (Sandbox Code Playgroud)
或者在进行分组之前在输入前加一个正数,然后从结果中减去1:
>>> len(list(itertools.groupby(itertools.chain([1], x), lambda x: x > 0))) - 1
Run Code Online (Sandbox Code Playgroud)
注意你的输入列表是否可以为空 - 前一个解决方案会引发异常.
X = [-3,2,7,-4,1,-1,1,6,-1,0,-2,1]
last_sign = 1
sign_changes = 0
for x in X:
if x == 0:
sign = -1
else:
sign = x / abs(x)
if sign == -last_sign:
sign_changes = sign_changes + 1
last_sign = sign
print sign_changes
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7180 次 |
| 最近记录: |