[英]Weird behavior with a lot of numbers python
所以我写了一个代码来检查一个列表中有多少次是相同的数字在一行中重复,当它得到它时,它将它们与用户输入的数字相除,然后将列表中的所有数字相加。 这一切都有效,直到我得到更大的数字,然后才开始不计算最后几个数字。
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 9 8 7 7 8 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 9 8 6 8 6 8 7 8 6 8 8 9 8 7 80 50 50 50 50 50 50 50
它给了我一个输出:25 而不是 26。
因为它没有正确计算最后几个数字。
如果有人可以解释这种行为,那将会有很大帮助。
可以从您的代码中简化几点。 首先,init 部分:在循环之前初始化final2
和d
,然后在循环之后通过为它们分配一个新值来第一次使用它们。 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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.