如何将文件中的行转换为二维数组

2024-04-25 15:16:15 发布

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

我对python相当陌生,我一直在努力编写一个程序,该程序将文件中的一行作为输入来验证loshu幻方。我需要做的是一次读取文件中的一行,每行读取一行 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

所以我觉得我在正确的轨道上,但它只是把每行的前三项附加到数据中,我不知道为什么


Tags: 文件intest程序fordataifline
1条回答
网友
1楼 · 发布于 2024-04-25 15:16:15

线总是有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)

相关问题 更多 >

    热门问题