Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与x27之间的参考差;范围内()';用法和';元素中的元素';python3中for循环的用法_Python_Python 3.x_For Loop_Reference - Fatal编程技术网

与x27之间的参考差;范围内()';用法和';元素中的元素';python3中for循环的用法

与x27之间的参考差;范围内()';用法和';元素中的元素';python3中for循环的用法,python,python-3.x,for-loop,reference,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() 我想做一个结构,这样我就可以有一个列表。

我正在读一个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变量)

同时,下面的工作,并成功地修改了读取的数据(lines变量)


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

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

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)
或一次完成(不将其保存为数据框对象的文本文件):


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

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)

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

在第一种情况下,它正在工作,但是每次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)

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

即使“line”的值重置为下一个“line”,当我执行“line=line.split()”时,它不应该更新“line”中该“line”内的值吗,因为“line”是对内存的引用?我对这里的行为还不是很确定。看起来更新根本没有发生。我相信接收行中所有项目的行变量是临时的,它意味着保存一个值供您使用,然后在下一次迭代中忘记它。例如,如果您尝试在For循环之外访问“line”变量,它将引发“no reference to…”异常关于split命令,它确实会更新变量,但是,它忘记了再次启动循环的一切。请澄清,行变量仅复制每个循环上列表元素的值,而不作为元素的引用,如果要编辑行列表的值,则需要使用工作示例中使用的索引系统,如行[i]返回对元素的引用,而不是元素的值。是否已解决?如果没有,你能详细说明为什么我们需要帮助吗?
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)
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)