如何将文件中的一行变成二维数组
How to turn a line in a file into a 2d array
我是 python 的新手,我一直在努力编写一个程序,该程序将文件中的一行作为输入来验证 Lo Shu 幻方。我需要做的是一次读取文件中的一行,每一行
1 2 3 4 5 6 7 8 9
例如,并将其转换为二维数组,例如
[[1,2,3],[4,5,6],[7,8,9]]
前三个数字对应幻方第一行的值,接下来的三个值对应第二行,最后三个值对应最后一行。
到目前为止我已经试过了
def main():
data = []
for line in open('Magic Square Input.txt'):
items = line.split(" ")
temp = 0
setOfThree = []
for item in items:
if(len(item) > 1):
item = item[0:1]
if(item != " "):
setOfThree.append(item)
temp += 1
if(temp == 3):
test = []
test = setOfThree[:]
test = [int(x) for x in test]
data.append(test)
但这只会给我
[[4, 3, 8]]
[[4, 3, 8], [8, 3, 4]]
[[4, 3, 8], [8, 3, 4], [6, 1, 8]]
[[4, 3, 8], [8, 3, 4], [6, 1, 8], [6, 9, 8]]
[[4, 3, 8], [8, 3, 4], [6, 1, 8], [6, 9, 8], [6, 1, 8]]
[[4, 3, 8], [8, 3, 4], [6, 1, 8], [6, 9, 8], [6, 1, 8], [6, 1, 3]]
[[4, 3, 8], [8, 3, 4], [6, 1, 8], [6, 9, 8], [6, 1, 8], [6, 1, 3], [5, 5, 5]]
文本文件的内容是
4 3 8 9 5 1 2 7 6
8 3 4 1 5 9 6 7 2
6 1 8 7 5 3 2 9 4
6 9 8 7 5 3 2 1 4
6 1 8 7 5 3 2 1 4
6 1 3 2 9 4 8 7 5
5 5 5 5 5 5 5 5 5
所以我觉得我在正确的轨道上,但它只是将每行的前三项附加到数据,我无法弄清楚为什么
行总是有 9 个元素,所以
line = "1 2 3 4 5 6 7 8 9"
items = line.split()
result = [items[0:3], items[3:6], items[6:9]]
print(result)
编辑: 与所有行相同
lines = """4 3 8 9 5 1 2 7 6
8 3 4 1 5 9 6 7 2
6 1 8 7 5 3 2 9 4
6 9 8 7 5 3 2 1 4
6 1 8 7 5 3 2 1 4
6 1 3 2 9 4 8 7 5
5 5 5 5 5 5 5 5 5"""
data = []
for line in lines.split('\n'):
items = line.split()
data.append([items[0:3], items[3:6], items[6:9]])
print(data)
如果你需要更通用的-针对不同的N
N = 3
data = []
for line in lines.split('\n'):
items = line.split()
array = []
while items:
array.append(items[:N])
items = items[N:]
data.append(array)
print(data)
我是 python 的新手,我一直在努力编写一个程序,该程序将文件中的一行作为输入来验证 Lo Shu 幻方。我需要做的是一次读取文件中的一行,每一行 1 2 3 4 5 6 7 8 9 例如,并将其转换为二维数组,例如 [[1,2,3],[4,5,6],[7,8,9]] 前三个数字对应幻方第一行的值,接下来的三个值对应第二行,最后三个值对应最后一行。
到目前为止我已经试过了
def main():
data = []
for line in open('Magic Square Input.txt'):
items = line.split(" ")
temp = 0
setOfThree = []
for item in items:
if(len(item) > 1):
item = item[0:1]
if(item != " "):
setOfThree.append(item)
temp += 1
if(temp == 3):
test = []
test = setOfThree[:]
test = [int(x) for x in test]
data.append(test)
但这只会给我
[[4, 3, 8]]
[[4, 3, 8], [8, 3, 4]]
[[4, 3, 8], [8, 3, 4], [6, 1, 8]]
[[4, 3, 8], [8, 3, 4], [6, 1, 8], [6, 9, 8]]
[[4, 3, 8], [8, 3, 4], [6, 1, 8], [6, 9, 8], [6, 1, 8]]
[[4, 3, 8], [8, 3, 4], [6, 1, 8], [6, 9, 8], [6, 1, 8], [6, 1, 3]]
[[4, 3, 8], [8, 3, 4], [6, 1, 8], [6, 9, 8], [6, 1, 8], [6, 1, 3], [5, 5, 5]]
文本文件的内容是
4 3 8 9 5 1 2 7 6
8 3 4 1 5 9 6 7 2
6 1 8 7 5 3 2 9 4
6 9 8 7 5 3 2 1 4
6 1 8 7 5 3 2 1 4
6 1 3 2 9 4 8 7 5
5 5 5 5 5 5 5 5 5
所以我觉得我在正确的轨道上,但它只是将每行的前三项附加到数据,我无法弄清楚为什么
行总是有 9 个元素,所以
line = "1 2 3 4 5 6 7 8 9"
items = line.split()
result = [items[0:3], items[3:6], items[6:9]]
print(result)
编辑: 与所有行相同
lines = """4 3 8 9 5 1 2 7 6
8 3 4 1 5 9 6 7 2
6 1 8 7 5 3 2 9 4
6 9 8 7 5 3 2 1 4
6 1 8 7 5 3 2 1 4
6 1 3 2 9 4 8 7 5
5 5 5 5 5 5 5 5 5"""
data = []
for line in lines.split('\n'):
items = line.split()
data.append([items[0:3], items[3:6], items[6:9]])
print(data)
如果你需要更通用的-针对不同的N
N = 3
data = []
for line in lines.split('\n'):
items = line.split()
array = []
while items:
array.append(items[:N])
items = items[N:]
data.append(array)
print(data)