从forloop中的下一行访问值以继续并中断?

2024-09-28 04:23:26 发布

您现在位置:Python中文网/ 问答频道 /正文

在给定的数据集中,我需要将不同块的值相乘。你知道吗

我想访问for循环中下一行的数据,然后构建列表,如果块值匹配,就创建一个产品,但我到目前为止查看的示例没有太大帮助。事实上,这些数据只是大数据的一部分,我需要一些关于它如何工作/为什么工作的任何解决方案的解释。你知道吗

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 and continue函数呢?

  • 我不想对块使用固定值,因为这是一个长文件,块值将更改。

  • 此外,具有相同块值的行可能不相邻。

  • 此外,我不需要解决熊猫,因为这只是一个大文件的一部分,这是独家开采使用的if-else循环。

提前多谢!你知道吗


Tags: to数据代码testfordatavalueline
1条回答
网友
1楼 · 发布于 2024-09-28 04:23:26
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))

你的问题是,你必须检查每一行找到一个匹配,这将是一个痛苦。只需将结果存储在dict中,然后在最后打印出来就更容易了。(如果您关心顺序,可以使用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)]

相关问题 更多 >

    热门问题