2016-03-08 76 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" 
相關問題