【问题标题】:How to create a new list for each line in a file?如何为文件中的每一行创建一个新列表?
【发布时间】:2016-03-08 16:46:08
【问题描述】:

我正在尝试创建一个 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 比较陌生,不知道如何计算列表中列表中的单个项目,所以这对我来说相当复杂。

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

【问题讨论】:

    标签: python list file


    【解决方案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]
    

    【讨论】:

    • @Goodies 除了 OP 已经读入数据,所以我怀疑问题标题不正确。
    • @Goodies 以与 OP 当前代码相同的方式。最终,手头的问题是关于拆分从文件中读取的行(至少我理解的方式)
    • 谢谢 - 这有助于将逗号放在列表中......它仍然在一个大列表中,但这不是问题......只要我能以某种方式操纵它!我现在如何在列表中操作这些列表?
    • @LewisFirmin 我不明白你到底在问什么。你能详细说明一下吗?
    • 上面提供的编码已经奏效——现在我在一个更大的列表中仍然有 3 个列表。现在唯一的区别是在每个“迷你列表”中,字符用逗号分隔,我相信这让我可以更轻松地操作列表。大列表现在读取 my_list = [['1', '2', '3', '4', '5'], ['2', '3', '4', '5', '1' ], ['3', '4', '5', '1', '2'], ['4', '5', '1', '2', '3'], ['5' , '1', '2', '3', '4']] 我不确定如何访问每个迷你列表,例如检查每个字符使用了多少次等。我知道如何为列表执行此操作一般...但不适用于列表中的列表?
    【解决方案2】:

    这应该可以解决大部分问题。我对你的最终规格不是很清楚,但你可以从这里弄清楚。

    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"
    

    【讨论】:

      猜你喜欢
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 2010-09-24
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 2019-11-18
      相关资源
      最近更新 更多