2016-03-08 75 views
0

我想创建一个soduko风格的程序。 甲记事本/ word文档上传到Python和我想Python来检查:如何为文件中的每一行创建一个新列表?

每一行(行)具有相同数量的字符 每列具有相同数量的字符 没有字符被在任何一个重复两次的列或连续排列 每个字符仅用于每列和每行一次

上传的文件可以是数字soduko或字母soduko。

到目前为止,我已经设法加载,打开并读取文档,并将文档的每一行附加为列表。下面我将显示我的编码以附加到列表中:

my_list = [line.strip() for line in open(filename)] 

print (my_list) 

但是,这将我所有的行放在一个更大的列表中。 例如,如果我的文档阅读:

1 2 3 
2 3 1 
3 1 2 

它会读my_list如下:[['1 2 3'], ['2 3 1'], ['3 1 2']]

我是比较新的Python和不知道如何在列表中算从列表中的个别项目所以这对我来说很复杂。

关于如何改进/改变我的编码以使我更容易的任何建议或提示?

回答

1

你可以split有自己的理解每一行:

my_list = [[x for x in line.strip().split(' ')] for line in open(filename)] 

注意,这oneliner,非常喜欢你的原代码,不会关闭该文件处理它打开。一个更安全的方法是单独打开它:

with open(filename) as f: 
    my_list = [[x for x in line.strip().split(' ')] for line in f] 
+0

这不适用于word文档。 – Goodies

+1

@Goodies除了OP已经读取了数据,所以我怀疑问题标题是不正确的。 – msw

+0

@以与OP目前的代码不同的方式制作精美的品牌。最终,手头的问题是关于分割从文件中读取的行(至少我理解它的方式) – Mureinik

0

这应该照顾它的大部分。我对你的最终规格不太清楚,但你可以从这里弄清楚。

from sets import Set 

with open(filename) as f: 
    my_list = [[x for x in line.strip().split(' ')] for line in f] 

    #Each row has same number of characters 
    #Each column has the same number of characters 
    counts = [len(x) for x in my_list] 
    if len(Set(counts)) > 1: 
     print "SAME NUM ERROR" 

    #No characters are repeated twice in a row 
    row_len = len(my_list[0]) 
    for row in my_list: 
     if len(Set(row)) < row_len: 
      print "ROW REPEAT ERROR" 

    #No characters are repeated twice in a column 
    col_len = len(my_list) 
    for i in range(col_len): 
     col = [row[i] for row in my_list] 
     if len(Set(col)) < col_len: 
      print "COL REPEAT ERROR" 
相关问题