python3中的for循环中'in range()'使用情况和'element in elements'使用情况之间的参考差异

时间:2018-07-03 14:18:42

标签: python python-3.x for-loop reference

我当前正在读取一个dummy.txt,内容显示如下:

8t1080 0.077500 0.092123 -0.079937
63mh9j 0.327872 -0.074191 -0.014623
63l2o3 0.504010 0.356935 -0.275896
64c97u 0.107409 0.021140 -0.000909

现在,我正在使用python读取它,如下所示:

lines = open("dummy.txt", "r").readlines()

我想建立一个结构,以便可以有一个列表...或数组数组(无关紧要)。每个较小的数组都将第0个元素作为字符串,并且以下小数点将为浮点数。为此,我目前正在尝试:

for line in lines:
    line = line.split()
    for x in range(1, len(line)):
        line[x] = float(line[x])

有趣的是,这不起作用,因为

for line in lines:
    line = line.split()

实际上不会拆分行并更改读取的数据(具体来说,行变量)。

同时,下面的方法可以成功修改读取的数据(lines变量)。

for x in range(0, len(lines)):
    lines[x] = lines[x].split()
    for x in range(1, len(line)):
        line[x] = float(line[x])

那么,两个具有两个不同结果的for循环之间有什么区别?

3 个答案:

答案 0 :(得分:1)

在这种情况下,您将从pandas中受益匪浅:

import pandas as pd

df = pd.read_csv('dummy.txt', sep=' ', header=None)

>>> df.values

array([['8t1080', 0.0775, 0.092123, -0.079937],
       ['63mh9j', 0.327872, -0.074191, -0.014622999999999999],
       ['63l2o3', 0.5040100000000001, 0.356935, -0.27589600000000003],
       ['64c97u', 0.10740899999999999, 0.02114, -0.000909]], dtype=object)

或者一劳永逸(无需将您的文本文件另存为数据框对象):

my_array = pd.read_csv('dummy.txt', sep=' ', header=None).values

>>> my_array
array([['8t1080', 0.0775, 0.092123, -0.079937],
       ['63mh9j', 0.327872, -0.074191, -0.014622999999999999],
       ['63l2o3', 0.5040100000000001, 0.356935, -0.27589600000000003],
       ['64c97u', 0.10740899999999999, 0.02114, -0.000909]], dtype=object)

答案 1 :(得分:1)

对于第一个示例,您只需要一个数据结构即可输出到

data = []
lines = open("dummy.txt", "r").readlines()
for line in lines:
    line = line.split()
    for x in range(1, len(line)):
        line[x] = float(line[x])
    data.append(line)

数据列表将包含您想要的内容。

答案 2 :(得分:0)

在您的第一种情况下,它正在工作,但是每次for循环时,该行变量都会重置为下一个值,并且其当前值会丢失,无法接收下一个值。

aux=[]
for line in lines: #here the program changes the value of line
    line = line.split() # here you change the value of line
    for x in range(1, len(line)):
        line[x] = float(line[x])
    aux.append(line)

使用辅助变量,您可以“保存”您的值以供以后使用