python - 如何检查列表中的连续负数或正数以及Python中的条件?

标签 python python-3.x list python-2.7

给定数据:

list =[-2,-2,-1,-2,-5,-6,-7,-5,-12,-2,-6,-54,-7,-2,3,2,5,68,68,1,5,3,9,7,-1,-1,-4,-4,-6,-7,-8,8]

在此列表中,我想计算连续 7 -(ve) 或 +(ve) 的数量,同时我想应用一个条件来查看这些数字是否连续超过 7 个连续项。

  1. 假设负项的数量连续超过 7 次,那么您将从第 7 个 -(ve) 值开始计数,而不是从下一个值开始计数。

  2. 假设如果有 7 个连续的 -(ve) 项,但在第 7 个 -(ve) 项之后,有一个 +(ve) 项,那么您将从第 7 个 -(ve) 项之前的下一个项开始计数(ve)术语)。

我编写了一个程序可以完成大部分工作。除了这部分,条件是查看连续性是否仍然存在。

我的代码:

dev = [-2,-2,-1,-2,-5,-6,-7,-5,-12,-2,-6,-54,-7,-2,3,2,5,68,68,1,5,3,9,7,-1,-1,-4,-4,-6,-7,-8,8]
counts = []
plus_counter = 0
minus_counter = 0
row_counter = 0
answer_counter = 1
for each in dev:

    if each > 0:
        minus_counter = 0
        plus_counter += 1

        if plus_counter == 7:
            count = answer_counter
            row_counter = answer_counter
            counts.append(count)
            plus_counter = 0
            answer_counter += 1

        else:
            counts.append(0)

    elif each < 0:
        plus_counter = 0
        minus_counter += 1

        if minus_counter == 7:
            count = answer_counter
            row_counter = answer_counter
            counts.append(count)
            minus_counter = 0
            answer_counter += 1

        else:
            counts.append(0)

    row_counter += 1
print("list: ", dev)
print("counter: ",counts)

输出:

("list: " -2,-2,-1,-2,-5,-6,-7,-5,-12,-2,-6,-54,-7,-2,3,2,5,68,68,1,5,3,9,7,-1,-1,-4,-4,-6,-7,-8,8)
("counter: " 0,0,0,0,0,0 ,1,0,0,0,0,0,0,2,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,4,0)

期望的输出:

("list: " -2,-2,-1,-2,-5,-6,-7,-5,-12,-2,-6,-54,-7,-2,3,2,5,68,68,1,5,3,9,7,-1,-1,-4,-4,-6,-7,-8,8)
("counter: " 0,0,0,0,0,0,1,0,0,0,0,0,"2",0,0,0,0,0,0,"3",0,0,0,0,0,0,0,0,0,0,4,0)

我标记了“2”和“3”,因为这是我犯错误的地方。如果连续性仍然持续到接下来的 7 个连续术语,我希望我的计数器从相同的第 7 个数字开始。

这是实际的差异,在我的输出中,“2”出现在第 14 个连续术语之后,因为我从第 7+1 个术语开始计数,但所需的输出“2”出现在第 13 个连续术语,因为计数从第 7 个术语开始。

NOTE: "4" is at the right place because counter is reset if the continuity breaks.

请帮忙,我不知道如何在条件中应用此条件。

最佳答案

当您有 plus_counter == 7: 时,只需重新初始化 plus_counter = 1 而不是 plus_counter = 0minus_counter 也是如此。

if plus_counter == 7:
    count = answer_counter
    row_counter = answer_counter
    counts.append(count)
    plus_counter = 1 # HERE IS THE DIFFERENCE
    answer_counter += 1

[...]

if minus_counter == 7:
    count = answer_counter
    row_counter = answer_counter
    counts.append(count)
    minus_counter = 1 # HERE IS THE DIFFERENCE
    answer_counter += 1

关于python - 如何检查列表中的连续负数或正数以及Python中的条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59408080/

相关文章:

Python列表: index out of range?

python - 使用 if/else 和 for 循环将项目附加到列表理解中的列表

c++ - 如何从用户那里获取输入并将其推送到列表

python - 旋转 python

Python 从另一个线程启动/停止线程会导致意外行为

macos - 如何在Mac上安装nose for python 3

python - LabelEncoder fit_transform() 函数中的问题

python - 为什么 numba 在这个简单的求和上要快得多?

python - 我可以指定另一个类的实例方法作为我的方法的变量吗?

django - 无法在 Mac 上卸载 Python 2.7.16