相关疑难解决方法(0)

用列表理解替换while循环

将循环表达为列表推导是很常见的:

mylist=[]
for i in range(30):
    mylist.append(i**2)
Run Code Online (Sandbox Code Playgroud)

这相当于:

mylist = [i**2 for i in range(30)]
Run Code Online (Sandbox Code Playgroud)

是否有任何一种机制可以通过while循环完成这种迭代?

mylist=[]
i=0
while i<30:
    mylist.append(i**2)
    i+=1
Run Code Online (Sandbox Code Playgroud)

当然,通过这个简单的例子,很容易转换为for循环,然后转换为列表理解,但是如果它不那么容易呢?

例如

mylist = [i**2 while i=0;i<30;i++ ]
Run Code Online (Sandbox Code Playgroud)

(当然上面的伪代码不是合法的python)(itertools想到这种事情,但我不太清楚这个模块.)

编辑

一个(非常简单)的例子,我认为一段时间的理解是有用的将是:

dt=0.05
t=0
mytimes=[]
while t<maxtime:
   mytimes.append(t)
   t+=dt
Run Code Online (Sandbox Code Playgroud)

这可以转化为:

dt=0.05
t=0
nsteps=maxtime/dt
mytimes=[]
for t in (i*dt for i in xrange(nsteps)):
    mytimes.append(t)
Run Code Online (Sandbox Code Playgroud)

可以写成(复合)列表理解:

nsteps=maxtime/dt
mytimes=[t for t in (i*dt for i in xrange(nsteps)] 
Run Code Online (Sandbox Code Playgroud)

但是,我认为,while循环是MUCH更容易阅读(而不是有索引错误)另外,如果你的对象(DT)支持"+"而不是"*"?如果maxtime循环的每次迭代以某种方式改变,可能会发生更复杂的例子......

python list-comprehension while-loop

2
推荐指数
1
解决办法
5788
查看次数

for循环在python中以十进制数作为步骤

我想创建一个看起来像这样的for循环:

for x in range(0, 1, 0.1):
    print(x)
Run Code Online (Sandbox Code Playgroud)

显然它会抛出这个错误:

回溯(最近调用最后一次):文件"",第1行,in in in range(0,1,0.1):TypeError:'float'对象不能解释为整数

所以在python 3.6中有一种方法可以创建一个带浮点的for循环吗?

python for-loop python-3.6

2
推荐指数
2
解决办法
2450
查看次数

python中的标准偏差 - 浮点对象不可迭代

我试图在python中找到数字的标准偏差.这是一个入门级编程类,所以我避免尝试使用函数,因为它们还没有被引入.

这个程序允许我在列表中添加数字,分析所述列表,然后显示平均值,最小值,最大值,STDev等.我已成功显示除STDev之外的所有内容,我不断得到的错误是浮动对象不可迭代.这是相关部分的代码:

elif (menuchoice == 4):
        sum = 0.0
        print("std deviation")
        stdev = 0.0
        for i in range(listcount):
            scorenum4 = eval(scorenum[i])
            scoreaverage2 += scorenum4
        scoreaverage2 /= listcount
        for i in range(listcount):
            stdev = []
            scorenum3 = eval(scorenum[i])
            stdev += (scorenum3 - scoreaverage2)**2
            dev = sqrt((stdev)/listcount-1)
        print(dev)
Run Code Online (Sandbox Code Playgroud)

任何帮助都会是geat,谢谢.

- 自我编辑 - 我刚从我的for循环中删除了stdev = [],不知道为什么它在那里 - 我现在得到一个答案,但它在数学上是关闭的

  • 更改为dev = sqrt((stdev)/ listcount)并修复了我的数学错误,DSM也确认了此修复.谢谢
  • 程序现在正常运行!活泉.谢谢大家的建议.

python python-3.x

1
推荐指数
1
解决办法
3298
查看次数

如何获得浮动范围列表?

如何获得浮动范围列表?为什么以下代码不起作用?

lons = list (range(80.0,90.0,0.05))

print (lons)
Run Code Online (Sandbox Code Playgroud)

python

1
推荐指数
1
解决办法
162
查看次数

如何在Python中执行三角形的浮点数范围?

MATLAB

x = 0:pi/100:2*pi;
y = sin(x);
plot(y)
Run Code Online (Sandbox Code Playgroud)

我认为range()不能在这里工作,因为它只接受结束参数作为整数但我需要浮点数(0.0; 2*pi).Python 2.7.11+中的伪代码

import math
x = pseudoRange(0.0, 2*math.pi, math.pi/100);
Run Code Online (Sandbox Code Playgroud)

ceil()对于整数而言,采取是不实际的.


你怎么能在Python中使用三角函数范围的浮点数?

python math

-3
推荐指数
1
解决办法
770
查看次数