从 for 循环中的下一行访问值以继续和中断?
Access values from next line within for-loop to continue and break?
在给定的数据集中,我需要将来自不同块的值相互相乘。
我想从 for 循环中的下一行访问数据,然后构建列表并在块值匹配时创建产品,但到目前为止我看过的示例不是'不太有帮助。实际上,这些数据只是大数据的一部分,我需要对 how/why 上提供的任何解决方案进行一些解释是否有效。
So,for X(set) I have to multiply: 0.25*0.1*0.83 (since they belong to same block
block X_set
2480 0.25
2480 0.1
2480 0.083
2651 0.43
2651 0.11
2651 0.23
我的代码如下:
test_q = open("test_question.txt", "r+")
header = test_q.readline()
data_q = test_q.read().rstrip("\n")
product=1.0
value_list = []
row = data_q.split("\n")
for line in row:
block = line.split("\t")
X_list = block[1].split()
X_value = float(block[1])
value_list = value_list + X_list
product = product*X_value
print(value_list)
print(product)
结果是:
['0.25', '0.1', '0.083', '0.43', '0.11', '0.23']
2.2573925000000003e-05
但是,我想要的印刷品
['0.25', '0.1', '0.083']
0.0002075
['0.43', '0.11', '0.23']
0.010879
所以,我想从下一行访问索引值,以便 for 循环可以继续或中断。
我尝试使用从下一行访问块值:
for i in range(0, len(row)-1):
next_line = row[i+1]
如何,我可以改进这段代码吗?
那么,如何在这个 for 循环中注入 break 和 continue 函数?
我不想为块使用固定值,因为这是一个长文件,块值会改变。
此外,具有相同块值的行可能不会彼此相邻。
此外,我不需要 pandas 上的解决方案,因为这只是大文件的一部分,它是使用 for-if-else 循环独家挖掘的。
在此先致谢!
from collections import defaultdict
from functools import reduce
from operator import mul
res = defaultdict(list)
with open('file') as f:
for r in f:
k, v = r.split()
res[k].append(v)
for v in res.values():
print(v)
print(reduce(mul, (float(f) for f in v), 1))
您的问题是您必须检查每一行才能找到匹配项,这会很痛苦。只存储在字典中然后在最后打印出结果会更容易。 (如果你关心顺序,你可以使用 OrderedDict
)
在评论中编辑@everestial007 的问题:
res = defaultdict(lambda: 1.0)
with open('file') as f:
for r in f:
k, v = r.split()
res[k] *= float(v)
for k, v in res.items():
res[k] = [str(v)]
在给定的数据集中,我需要将来自不同块的值相互相乘。
我想从 for 循环中的下一行访问数据,然后构建列表并在块值匹配时创建产品,但到目前为止我看过的示例不是'不太有帮助。实际上,这些数据只是大数据的一部分,我需要对 how/why 上提供的任何解决方案进行一些解释是否有效。
So,for X(set) I have to multiply: 0.25*0.1*0.83 (since they belong to same block
block X_set
2480 0.25
2480 0.1
2480 0.083
2651 0.43
2651 0.11
2651 0.23
我的代码如下:
test_q = open("test_question.txt", "r+")
header = test_q.readline()
data_q = test_q.read().rstrip("\n")
product=1.0
value_list = []
row = data_q.split("\n")
for line in row:
block = line.split("\t")
X_list = block[1].split()
X_value = float(block[1])
value_list = value_list + X_list
product = product*X_value
print(value_list)
print(product)
结果是:
['0.25', '0.1', '0.083', '0.43', '0.11', '0.23']
2.2573925000000003e-05
但是,我想要的印刷品
['0.25', '0.1', '0.083']
0.0002075
['0.43', '0.11', '0.23']
0.010879
所以,我想从下一行访问索引值,以便 for 循环可以继续或中断。
我尝试使用从下一行访问块值:
for i in range(0, len(row)-1):
next_line = row[i+1]
如何,我可以改进这段代码吗?
那么,如何在这个 for 循环中注入 break 和 continue 函数?
我不想为块使用固定值,因为这是一个长文件,块值会改变。
此外,具有相同块值的行可能不会彼此相邻。
此外,我不需要 pandas 上的解决方案,因为这只是大文件的一部分,它是使用 for-if-else 循环独家挖掘的。
在此先致谢!
from collections import defaultdict
from functools import reduce
from operator import mul
res = defaultdict(list)
with open('file') as f:
for r in f:
k, v = r.split()
res[k].append(v)
for v in res.values():
print(v)
print(reduce(mul, (float(f) for f in v), 1))
您的问题是您必须检查每一行才能找到匹配项,这会很痛苦。只存储在字典中然后在最后打印出结果会更容易。 (如果你关心顺序,你可以使用 OrderedDict
)
在评论中编辑@everestial007 的问题:
res = defaultdict(lambda: 1.0)
with open('file') as f:
for r in f:
k, v = r.split()
res[k] *= float(v)
for k, v in res.items():
res[k] = [str(v)]