【发布时间】:2019-08-29 19:00:15
【问题描述】:
我想生成一个 csv 文件,其中包含以下格式的行 不。列数是动态的,它可能会随着变量“n”的值而变化。所以,如果我们有 n=3 将有 3 列: 第一行在第一行的每个单元格中初始化为 1/3 值,如下所示 0.333 0.333 0.333 类似地,如果 n=6,将有 6 列,并且第一行在第一行的每个单元格中初始化为 1/6 值。 0.166667 0.166667 0.166667 0.166667 0.166667 0.166667
每行所有元素之和必须等于 1。
没有限制。的行。我们只担心元素之和应该等于1。 下表是我的代码生成的 csv 文件的前几行:
0.166667 0.166667 0.166667 0.166667 0.166667 0.166667 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0.166667 0.833333 0 0 0 0 0.333333 0.666667 0 0 0 0 0.5 0.5 0 0 0 0 0.666667 0.333333
我是编程新手,我认为我的逻辑效率不高。我正在尝试找出一种方法来减少我在下面的代码中使用的 for 循环的数量。如果 n 的值增加,则没有。如果我们按照我的逻辑,for 循环的数量也会增加。请帮帮我。
import csv
n = 6 #This variable is controlled by other factors and may change
f = [0, 1]
for i in range(1, n):
j = float(i) / float(n)
f.append(j)
# Generate WS
initial = float(1) / float(n)
w = []
for i in range(n):
w.append(initial)
ws = [w]
for i in f:
for j in f:
for k in f:
for l in f:
for m in f:
for o in f:
if (i + j + k + l + m + o == 1):
w = [i, j, k, l, m, o]
ws.append(w)
with open('weight.csv', 'w') as cfile:
cwrite = csv.writer(cfile)
cwrite.writerows(ws)
预期的 csv:
0.166666667 0.166666667 0.166666667 0.166666667 0.166666667 0.166666667
0 0 0 0 0 1
0 0 0 0 1 0
0 0 0 0 0.166666667 0.833333333
0 0 0 0 0.333333333 0.666666667
0 0 0 0 0.5 0.5
0 0 0 0 0.666666667 0.333333333
0 0 0 0 0.833333333 0.166666667
0 0 0 1 0 0
0 0 0 0.166666667 0 0.833333333
等等..有很多行,但显示前几行。
【问题讨论】:
标签: python-3.x csv for-loop