【问题标题】:For loop to append all numbers to variableFor循环将所有数字附加到变量
【发布时间】:2015-11-10 11:33:19
【问题描述】:

我编写了一些代码来打开一个文本文件并获取我需要的列并将其分配给一个变量。 for 循环之前的一切都正常。现在在循环中,我想将g 中的所有数字作为双打列表,但一直以来我只有最后一个lis1

提前致谢。

代码:

import numpy as N
import math as M

with open('File.txt',"r") as f:
    lis1 = [float(line.split()[4]) for line in f]
    f.seek(0)
    lis2 = [float(line.split()[6]) for line in f]
    f.seek(0)
    lis3 = [float(line.split()[8]) for line in f]
    f.seek(0)
    lis4 = [float(line.split()[10]) for line in f]
    f.seek(0)
    lis5 = [float(line.split()[12]) for line in f]
    f.seek(0)
    lis6 = [float(line.split()[14]) for line in f]
    i= 0
    j = i+1

    for t in (lis1):
        g = ((lis1[i:j]))                                   
        k = ((lis2[i:j]))                                          
        kl = ((lis3[i:j]))                                    
        kk = ((lis4[i:j]))
        kk2 = ((lis5[i:j]))
        kk3 = ((lis6[i:j]))
        i = i+1
        j = j+1

【问题讨论】:

  • 有趣的是你有最后一个元素。根据您的代码,它应该是第一个。
  • 你更新 for 循环中的 i, j 值了吗?
  • @zetysz 是的。我更新它们。如果我打印 g(例如),它会显示所有这些,但只将最后一个数字分配给 g。
  • 目前还不清楚您要在这里做什么。
  • 在循环的每次迭代中,您都会覆盖变量。这就是为什么只保留最后一个。你想达到什么目标?

标签: python for-loop


【解决方案1】:

问题在于g变量在每次迭代中都会更新。

最后如果for t loops 10你应该有g = ((list1[10:11]))

示例:

list1=[0,1,2,3,4,5,6,7,8,9]
i=0  
j=i+1  
for t in list1:  
    g=((list1[i:j]))  
    i+=1  
    j+=1  
...
g = (([9]))

我们应该从最后一个索引到..,这将返回最后一个元素。

【讨论】:

  • 也许我不明白。这个代码和我的代码有什么不同?
  • 我试图解释错误。要获取所有元素,请使用 g.append(list[i:j])。
【解决方案2】:

您的问题是,在循环的每次运行中,您都分配了g=lis1[i:j],这将使g 最终得到循环中的值lis1[i:j](这将只是lis1 的最后一个元素)。

如果您希望g 包含lis1 的所有元素,您只需复制lis1

import numpy as N
import math as M

with open('File.txt',"r") as f:
    lis1 = [float(line.split()[4]) for line in f]
    f.seek(0)
    lis2 = [float(line.split()[6]) for line in f]
    f.seek(0)
    lis3 = [float(line.split()[8]) for line in f]
    f.seek(0)
    lis4 = [float(line.split()[10]) for line in f]
    f.seek(0)
    lis5 = [float(line.split()[12]) for line in f]
    f.seek(0)
    lis6 = [float(line.split()[14]) for line in f]

    g = []

    for t in (lis1):
        g.append(t)                          

但是当然有人会想知道你为什么要从一开始就这样做(你已经在lis1 中拥有它) - 你可以通过直接复制为g=lis1[:] 甚至g=lis1 来更容易地做到这一点。

【讨论】:

  • 真的很抱歉,但我不明白,复制 lis1 是什么意思?
  • 使g 包含与lis1 相同的元素/数字。
  • 但这只是一小部分。我想学习它以便以后为程序的所有其他部分执行此操作。我想我不能对所有程序都使用这种方法。
  • @kian 你到底想做什么?
  • 我想将 for 循环的结果(即浮点数)附加到列表中。然后我可以用这个代码取出任何元素:g[m:n].
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 2021-06-24
  • 2015-08-23
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
  • 2021-05-17
相关资源
最近更新 更多