繁体   English   中英

如何从列表中计算每个集合中的负数和正数?

[英]how to count negative and positive numbers in each set from a list?

我有包含 30 个数字的列表

list = [-21,-22,-33,-55,-454,65,48,-516,614,6,2,-64,-64,-87,6,45,87,15,11,03,-34,-6,-68,-959,-653,24,658,68,9,-2181]

现在首先我想计算连续 3 个正数或负数的数量。 为此,我正在使用这个程序:

list = [-21,-22,-33,-55,-454,65,48,-516,614,6,2,-64,-64,-87,6,45,87,15,11,03,-34,-6,-68,-959,-653,24,658,68,9,-2181]
counts = []
count = 0

daysCounter = 1
plus_counter = 0
minus_counter = 0
row_counter = 0
answer_counter = 1

for each in list: # for the "dev column"
    if each > 0:
        minus_counter = 0
        plus_counter += 1

        if plus_counter == 3:
            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 == 3:
            count = answer_counter
            row_counter = answer_counter
            counts.append(count)
            minus_counter = 0
            answer_counter += 1
        else:
            counts.append(0)

    row_counter += 1

print counts

输出:

[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 0, 6, 0, 0, 0, 0, 7, 0, 0]

这是正确的,但我想在%10 == 0位置重置计数器。 基本上,如果列表包含 30 个元素,那么我想从 0 到第 10 个元素然后从第 11 个到第 20 个然后从第 21 个到第 30 个元素之间进行计数。 所需的输出:

[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0]

基本上,您必须为每个时期重置为默认值:

# other code
for i, each in enumerate(list): # for the "dev column"
    if i % 10 == 0:
        count = 0
        daysCounter = 1
        plus_counter = 0
        minus_counter = 0
        row_counter = 0
        answer_counter = 1
    # remaining code

注意:您不应该将您的列表命名为list ,因为您覆盖了内置的。

你的问题对我来说没有意义,你说你想在每个模块 10 索引上重置,然后你继续说你想要的 30 个元素的列表

  • 0 到 10(这是 11 个元素)
  • 11 到 20(这是 10 个元素)
  • 21 到 30(这是 10 个元素)

总共有 31 个元素,但您说您的列表有 30 个元素。 这将被索引从 0 到 29。所以我在这里做了一个假设,你的意思是每 10 个 eleemts IE 0 到 9、10 到 19、20 到 29。这使我的输出与你的不符,但我再次只能在这里假设您错误地计算了索引。

nums = [
    -21, -22, -33, -55, -454, 65, 48, -516, 614, 6,
    2, -64, -64, -87, 6, 45, 87, 15, 11, 3,
    -34, -6, -68, -959, -653, 24, 658, 68, 9, -2181
]

nths = 10
sequential_limit = 3
sequential_count = sequential_finds = 0
indexer = sequential_limit - 1
sequential_list = [0 for _ in range(indexer)]
skip = 0

for index, num in enumerate(nums[indexer:], indexer):
    result = 0
    if index % nths == 0:
        sequential_count = sequential_finds = 0
        skip = indexer
    if skip:
        skip -= 1
    else:
        negative = sum(1 for next_num in nums[index - indexer:index + 1] if next_num < 0)
        positive = sum(1 for next_num in nums[index - indexer:index + 1] if next_num >= 0)
        if sequential_limit in (positive, negative):
            sequential_finds += 1
            sequential_count = 0
            skip = indexer
            result = sequential_finds
    sequential_list.append(result)

print(sequential_list)

输出

[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0]

我认为您发布的上述所需输出不正确

最后添加此代码,此代码将重置列表的第 0 到 9、第 10 到 19、20 到 29 个元素之间。

list_len = len(counts)
total_multiple = int(list_len/10)

for i in range(1, total_multiple):

    count = 0
    for j in range(10*i, 10*i+10):

        if(counts[j] > 0):
            counts[j] = count
            count += 1
print(counts)

它将修改您的列表并打印

[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM