gpt4 book ai didi

python - 大量数字python的奇怪行为

转载 作者:行者123 更新时间:2023-12-04 08:51:15 24 4
gpt4 key购买 nike

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

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。
因为它没有正确计算最后几个数字。
如果有人可以解释这种行为,那将会有很大帮助。

最佳答案

可以从您的代码中简化几点。首先,初始化部分:你初始化 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))

关于python - 大量数字python的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64093121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com