Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.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
简单python查询_Python - Fatal编程技术网

简单python查询

简单python查询,python,Python,所以我的问题是,我有一个下载程序,到目前为止下载了文件的百分比。 有时百分比会上升一倍或几倍,上升4倍或5倍等等。 假设我的文件下载量的百分比如下: 0 % done 1 % done 2 % done 2 % done 2 % done 3 % done 3 % done 3 % done 3 % done 3 % done 4 % done 5 % done 6 % done 7 % done 7 % done 8 % done 9 % done 10 % done 10 % done 11

所以我的问题是,我有一个下载程序,到目前为止下载了文件的百分比。 有时百分比会上升一倍或几倍,上升4倍或5倍等等。 假设我的文件下载量的百分比如下:

0 % done
1 % done
2 % done
2 % done
2 % done
3 % done
3 % done
3 % done
3 % done
3 % done
4 % done
5 % done
6 % done
7 % done
7 % done
8 % done
9 % done
10 % done
10 % done
11 % done
12 % done
12 % done
12 % done
13 % done
14 % done
14 % done
15 % done
16 % done
17 % done
17 % done
17 % done
17 % done
17 % done
18 % done
19 % done
20 % done
20 % done
20 % done
20 % done
21 % done
22 % done
23 % done
24 % done
25 % done
26 % done
26 % done
27 % done
28 % done
28 % done
29 % done
30 % done
30 % done
31 % done
32 % done
33 % done
33 % done
33 % done
33 % done
33 % done
34 % done
35 % done
36 % done
36 % done
37 % done
37 % done
38 % done
38 % done
38 % done
39 % done
40 % done
40 % done
40 % done
41 % done
41 % done
41 % done
42 % done
42 % done
43 % done
43 % done
44 % done
44 % done
45 % done
45 % done
46 % done
46 % done
47 % done
47 % done
47 % done
47 % done
47 % done
48 % done
48 % done
49 % done
50 % done
50 % done
50 % done
51 % done
51 % done
51 % done
52 % done
52 % done
53 % done
54 % done
54 % done
54 % done
54 % done
54 % done
54 % done
54 % done
54 % done
55 % done
55 % done
55 % done
55 % done
56 % done
56 % done
56 % done
56 % done
56 % done
56 % done
57 % done
58 % done
59 % done
60 % done
60 % done
61 % done
61 % done
62 % done
62 % done
63 % done
64 % done
65 % done
65 % done
66 % done
66 % done
67 % done
67 % done
67 % done
68 % done
68 % done
69 % done
69 % done
70 % done
70 % done
71 % done
72 % done
73 % done
74 % done
74 % done
75 % done
76 % done
77 % done
78 % done
79 % done
79 % done
80 % done
80 % done
81 % done
81 % done
81 % done
82 % done
83 % done
84 % done
85 % done
85 % done
85 % done
85 % done
86 % done
87 % done
87 % done
87 % done
87 % done
87 % done
87 % done
88 % done
89 % done
89 % done
89 % done
90 % done
90 % done
90 % done
91 % done
91 % done
92 % done
93 % done
94 % done
94 % done
95 % done
95 % done
96 % done
97 % done
98 % done
99 % done
99 % done
99 % done
100 % done
我想要百分比上升的数字。。。因此,如果是:

0 % done
1 % done
2 % done
2 % done
2 % done
3 % done
3 % done
3 % done
3 % done
3 % done
4 % done
5 % done
结果会是这样的:

1
1
0
0
0
1
0
0
0
0
1
1
1
import random

a=0
z=0
c=0
while a!=100:
    b=random.randint(1,2)
    z+=a
    if b==1:

        a+=1
    z-=a
    print a
    c+=a
    final=c-a
    print final
我知道这很简单,到目前为止我试过这样的方法:

1
1
0
0
0
1
0
0
0
0
1
1
1
import random

a=0
z=0
c=0
while a!=100:
    b=random.randint(1,2)
    z+=a
    if b==1:

        a+=1
    z-=a
    print a
    c+=a
    final=c-a
    print final

我几乎可以肯定的是,我让这个问题变得更加复杂。

给定
x
是百分比列表(下载完成率):

然后使用“有限差分法”获得变化:

delta_x = [ x[i+1] - x[i] for i in xrange(0, len(x)-1) ]
我将其作为列表理解编写,但您也可以通过循环来完成。

我的版本:

>>> s = """
... 1
... 2
... 3
... 3
... 3
... 4
... 4
... 5
... 6
... 7
... 7
... 7
... 7
... 8
... """
>>> percents = map(int, filter(bool, s.splitlines()))
>>> percents
[1, 2, 3, 3, 3, 4, 4, 5, 6, 7, 7, 7, 7, 8]
>>> map(lambda (a, b): b - a, zip(percents[:-1], percents[1:]))
[1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1]
>>>

我将使用模块编写它。在其他答案中,与列表理解和其他方法的主要区别在于,我们不需要计算应该迭代到的元素的位置(不需要使用切片)。所有这些逻辑都包含迭代器,迭代器在需要时只会引发
StopIteration

from itertools import tee, izip

current_iter, previous_iter = tee(iter(L))
next(current_iter,None)

for current,previous in izip(current_iter, previous_iter):
    print current-previous
iter(L)
创建列表L的迭代器

创建两个iter(L)迭代器,返回相同的值

next(当前iter,无)
当前iter
前进1个位置。此外,如果
L
有1或0个值,则不会引发异常,并且
None
将被返回(为了实现这种行为,我们使用
None
作为
next
函数的第二个参数。让代码吞下
Stop iteration
异常不是问题,因为如果此迭代器(实际上将被for循环捕获,该循环将停止迭代)

用于同时通过迭代器
当前迭代程序
上一个迭代程序

就这样,不太复杂

也可以制作一个发电机:

from itertools import tee, izip

def Gen(L):
    current_iter, previous_iter = tee(iter(L))
    next(current_iter,None)

    for current,previous in izip(current_iter, previous_iter):
        yield current-previous
然后,可以使用发电机:

it1 = Gen(L)
for value in it1:
    print value

如果您“在运行中”获得这些值,您只需打印当前-以前的,然后设置
previous=current
。使用列表理解。Map+Filter会灼伤我的眼睛哦,对不起,您的眼睛,不是有意无害的,伙计。不过,我建议您在阅读功能代码之前戴上某种代码护目镜。@dmedvinsky:重点是您应该使用在Python中工作时,任何东西都可以使用Python样式。为什么不直接使用
.split()
,而不是使用
splitlines()
percents=[int(n)表示s.split()中的n
[b-a表示a,b表示zip中的b(percents[:-1],percents[1:]
第一步:使用更好的变量名。
a
b
c
z
都不是好的变量名。这使得它比必须的要复杂得多。第二步:遵循并使
a=0
a=0、
a!=100
a!=100
等;这也会使您的代码更加复杂可修改。变量
z
目前没有任何用途。