列表中Python的3x3网格

时间:2015-02-21 23:30:40

标签: python

我有一个从文本文件生成的列表,需要将其放入3x3网格中。我尝试了多种方法,但它们似乎都适用于旧版本的Python。

with open("words.txt") as f: #open/import words from words.txt
words = [x.strip() for x in f] #add to list

我需要将文本文件中的单词添加到列表中。文件中有10个单词,显示了9个单词。我已经通过从文本文件中删除/删除列表中的单词来删除/添加单词。

2 个答案:

答案 0 :(得分:1)

不确定你是否想要最后九个或前九个,如果你想要前九个删除第一个(f),我假设每个单词都在一个单独的行上:

with open("words.txt") as f: #open/import words from words.txt
    next(f) # skip first?
    words  = [[next(f).strip() for _ in range(3)] for _ in range(3)]

或者使用itertools.islice:

from itertools import islice

with open("words.txt") as f: #open/import words from words.txt
    next(f)
    words = [list(map(str.rstrip,islice(f,None,3))) for _ in range(3)]

答案 1 :(得分:0)

只是有点不同,我假设所有单词都包含在一行中。这样我就能用readline()读取该行,拆分并切掉第一个元素。如果我想要前9个,我可以说[:9],或者显然是有更多文本的行的其他切片。

import numpy as np

with open('filename.txt', 'r') as fp:
    words = fp.readline().split()[1:]

threebythree = np.array(words).reshape((3,3))

但是我想要展示的是你正在做的事实上正在重塑矩阵,这可以通过像numpy这样的工具包来完成。首先,将列表读入数组(9维1D数组),然后使用上述命令将其重新整形为3,3。列表"单词"如果需要,在这个例子中保持原样以便进一步处理。