为什么这段代码执行错误?

时间:2017-07-07 11:37:08

标签: arrays python-3.x

有一个输入文件" input.txt"。它看起来像:

plist

还有一个代码:

7
4
2
5
2
9
8
6
10
8
4

我需要将所有数字放在"数组"变量,但是我运行代码 - 我变空了#34;数组"。代码中有错误吗?

(抱歉这样的noob问题)

1 个答案:

答案 0 :(得分:1)

我无法重现您的错误。另外,在运行代码时,我不会得到一个空数组。请参阅以下代码和结果。当输入数据与您的输入数据一样干净时,我仍然建议使用np.genfromtxt

代码:

import numpy as np

# I have input.txt in same directory as this .py-file

# np.genfromtxt with int and with string
approach1a = np.genfromtxt('input.txt', dtype=int)
approach1b = np.genfromtxt('input.txt', dtype=np.str_)

# list comprehension
approach2 = []
with open('input.txt') as file:
    approach2 = [str(line) for line in file]

# like your approach, but without a, b and the if statement
approach3 = []
with open('input.txt') as file:
    for line in file:
        approach3.append(line)

# your code
inn = open("input.txt", "r")
a = 0
b = 10
array = []
while not a == b:
    for i, line in enumerate(inn):
        if i == a:
            array += str(line)
    a+=1

结果:

>>> approach1a
array([ 7,  4,  2,  5,  2,  9,  8,  6, 10,  8,  4])
>>> approach1b
array(['7', '4', '2', '5', '2', '9', '8', '6', '10', '8', '4'],
      dtype='<U2')
>>> approach2
['7\n', '4\n', '2\n', '5\n', '2\n', '9\n', '8\n', '6\n', '10\n', '8\n', '4']
>>> approach3
['7\n', '4\n', '2\n', '5\n', '2\n', '9\n', '8\n', '6\n', '10\n', '8\n', '4']
>>> array
['7', '\n']

使用您的代码只读取inpur文件的第一行的原因是因为使用open,您只能迭代一行。如果你这样做了,你就不能回去了。要理解这一点,请参阅@Aaron Hall对this question的回答:只有一种方法next,但没有办法可以返回(在这种情况下,返回一行)。当您将open的值设置为a时,即已将输入文件的第一行添加到{{}之后,您已达到1的所有行都使用过的那一点1}}。这就是为什么我理解您的代码只读取第一行,为什么我无法重现您声称您将array作为空列表以及为什么我建议array