gpt4 book ai didi

python - 如何在Python中仅匹配以下值的计算总和

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

我有这样一个输入文件,以及如何仅匹配下一个ip值计算和范围值的总和并获取第一个ip值。

输入:

Code  Range   Ip
CN 5 16777210
CN 5 16777215
CN 5 16777220
AU 5 16778240
CN 2 16843776
CN 2 16843799

(这两个值代码 CN 相同)

but 140(ip) and 2(range) 140 + 2 = 142

所以它与下一个值158的计算不一样因此,如果计算与下一个 ip 值匹配,则仅计算范围值的总和)

如果与下一个IP值的计算不匹配,则只需要原始值即可输出。

输出:(此输出正确)

CN    15      16777210
AU 5 16778240
CN 2 16843776
CN 2 16843799

但是我的Python代码得到了错误的输出,并且它是不正确的,因为它都计算了匹配的代码

(另外,194000行的输入值无法正确读取,它没有输出所有值,在我的代码中读取文件很慢)

代码:

stack = []
file = "/Users/kiya/Desktop/input.txt"
with open(file, 'r') as f:
for line in f:
data = line.split()
data[1] = int(data[1])
if stack and data[0] == stack[-1][0]:
stack[-1][1] += data[1]
else:
stack.append(data)

for i in stack:
print("{0} {1} {2}".format(i[0],i[1],i[2]))

(这是错误的输出)

CN    15      16777210
AU 5 16778240
CN 4 16843776

最佳答案

将第三列转换为 int 并将条件更改为:

if stack and data[0] == stack[-1][0] and sum(stack[-1][1:3]) == data[2]: 

应该产生您正在寻找的结果:

lines = ["CN    5       16777210",
"CN 5 16777215",
"CN 5 16777220",
"AU 5 16778240",
"CN 2 16843776",
"CN 2 16843799"]

stack = []
for line in lines:
data = [ col for col in line.split(" ") if col != "" ]
data = [ data[0], int(data[1]), int(data[2]) ]
if stack and data[0] == stack[-1][0] and sum(stack[-1][1:3]) == data[2]:
stack[-1][1] += data[1]
else:
stack.append(data)

for item in stack:print(item)

['CN', 15, 16777210]
['AU', 5, 16778240]
['CN', 2, 16843776]
['CN', 2, 16843799]

关于python - 如何在Python中仅匹配以下值的计算总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54757773/

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