【问题标题】:Python make a list out of text file with one element on each linePython从文本文件中创建一个列表,每行一个元素
【发布时间】:2021-12-14 06:25:33
【问题描述】:

我有一个带有数字列表的文本文件(每行一个),是否可以从该文本文件中制作一个列表,其中一行有一个数字?我需要这个,以便我可以成对地浏览数字列表,其中我首先取两个第一个数字,然后是第三个和第四个数字,然后像这样遍历整个文件,直到没有剩下的数字。目前我将所有数字都放在同一行,但是当我需要使用除前两个数字之外的 so 时会变得很棘手。

list = []
file = open("doc.txt", "r")
for line in file:
list.append(line.strip())

编辑:我一直试图以不必要的复杂性来解决这个问题。我可以使用列表的索引来使其工作(我假设)

【问题讨论】:

  • 请显示您想要的确切输出?由于您最后有一个列表,因此不再有“行”的概念。顺便说一句,您需要将数字作为字符串,还是作为浮点数或整数?
  • 输出需要是一个列表,例如 [2 + 3 = 5],字符串会很好,因为此后不需要以任何重要方式使用输出

标签: python list file text element


【解决方案1】:

看看这里。 构建列表后,将其拆分为一个新列表,其中每个元素是两个元素的列表,然后迭代新列表。

list = []
file = open("doc.txt", "r")
for line in file:
    list.append(float(line.strip()))
pairs = [list[2*i:2*i+2] for i in range(0, len(list)/2)]
for x1,x2 in pairs:
    print("Calculate ({}, {})".format(x1, x2))

我在文本文件中输入了数字 1...10 每行一个,输出是

Calculate (1.0, 2.0)
Calculate (3.0, 4.0)
Calculate (5.0, 6.0)
Calculate (7.0, 8.0)
Calculate (9.0, 10.0)

假设文本文件有有效数据:数字和偶数行。

【讨论】:

    【解决方案2】:

    您可以执行以下操作来获取对:

    with open("doc.txt", "r") as file:
        lst = [line.strip() for line in file]  # do not shadow built-in name `list`
    pairs = [lst[i:i+2] for i in range(0, len(lst), 2)]
    

    另一种(更优雅)没有中间 list(更节省空间)的方式使用相关的迭代器直接处理对:

    with open("doc.txt", "r") as file:
        nums = map(str.strip, file)
        nums = map(int, nums)  # if needed for calculations
        pairs = [*zip(nums, nums)]
    
    for a, b in pairs:
        print(a + b)
        print(a - b)
        # ...
    

    【讨论】:

    • 您认为在尝试遍历列表时使用这些对还是仅使用列表索引会更容易?我需要能够使用文本文件中给出的两个数字进行一些数学计算,并且在每次计算之后,它需要移动到列表/文本文件中的下两个数字
    • 配对相当方便。我添加了用于以可读方式迭代对的代码。
    猜你喜欢
    • 2015-08-04
    • 2012-10-25
    • 1970-01-01
    • 2020-06-18
    • 2019-08-22
    • 2013-12-19
    • 2015-01-31
    • 1970-01-01
    相关资源
    最近更新 更多