【问题标题】:Weird behavior with a lot of numbers python大量数字python的奇怪行为
【发布时间】:2021-01-13 12:02:05
【问题描述】:

所以我编写了一个代码来检查列表中有多少次是同一数字连续重复,当它得到它时,它将它们与用户输入的数字相除,然后将列表中的所有数字相加。这一切都有效,直到我得到更大的数字,然后它才开始不计算最后几个数字。

N = int(input())
Ai = input()
arr = [int(x) for x in Ai.split()]
c = 0
final = []
final2 = []
d = []
b = len(set(arr)) 
frozen_num = arr[0]
for i in range(0, len(arr) + b):
    try:
        if frozen_num == arr[0]:
            arr.remove(arr[0])
            c+=1
        else:
            final.append(c)
            frozen_num = arr[0]
            c = 0 
    except:
        pass
final.append(c)
for l in final:
    d.append(l/N)
final2 = map(int, d)
print(sum(final2))

输入:用户选择的分割数:“3”,数字列表[“5, 5, 5, 5, 4, 4, 4, 2, 2]

输出:2

但是当我给它一个输入时:20 38 66 66 66 66 66 66 66 66 13 13 13 13 13 13 13 13 13 13 13 43 43 43 43 43 43 22 22 22 98 98 98 98 98 98 77 7 7 7 7 7 7 7 7 7 7 7 82 82 82 82 26 47 41 38 38 38 57 57 57 79 79 79 79 79 79 79 79 79 79 79 79 79 79 98 98 98 98 98 98 98 98 13 67 67 67 67 80 80 80 80 80 50 50 50 50 50 50 50

它给了我一个输出:25 而不是 26。

因为它没有正确计算最后几个数字。

如果有人能解释这种行为,那将是非常有帮助的。

【问题讨论】:

  • 您应该尝试使用 pass 删除该 try/catch,然后看看会发生什么。
  • 您能否排除input() 调用并对值进行硬编码?它应该排除输入和解析,并且应该是提取minimal reproducible example 的一部分。作为这里的新用户,也请带上tour并阅读How to Ask
  • 我硬编码了它不起作用的值。

标签: python list for-loop indexing


【解决方案1】:

可以从您的代码中简化几点。首先,初始化部分:在循环之前初始化final2d,然后在循环之后通过为它们分配一个新值来第一次使用它们。 init部分可以简化为:

N = int(input())
Ai = input()
arr = [int(x) for x in Ai.split()]
c = 0
final = []
b = len(set(arr)) 
frozen_num = arr[0]

您可以简单地遍历它,而不是从 arr 中删除项目:

for i in arr:
    if frozen_num == i:
        c+=1
    else:
        final.append(c)
        frozen_num = i
        c = 1

我删除了 try/except 块,因为您似乎在尝试为 range 函数找到正确输入时放置了它,但如果我忽略了某些内容,您可以将其放回去。请注意,c=0 现在是 c=1,以便立即计算元素,而不是在其上循环两次。

最后,使用列表推导式初始化 d : d = [l/N for l in final]

进行这三个修改后,我现在得到的是 26 而不是您的示例中的 25。事实证明,您的范围输入不正确:您可以在示例中循环 len(arr) + b+2 次:尝试一下,您将得到 26。

最终代码:

N = int(input())
Ai = input()
arr = [int(x) for x in Ai.split()]
c = 0
final = []
b = len(set(arr)) 
frozen_num = arr[0]
for i in arr:
    if frozen_num == i:
        c+=1
    else:
        final.append(c)
        frozen_num = i
        c = 1
final.append(c)
d = [l/N for l in final]
final2 = map(int, d)
print(sum(final2))

【讨论】:

    猜你喜欢
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多