Python 如何总结数组';s项大于、大于0、小于10

Python 如何总结数组';s项大于、大于0、小于10,python,python-3.x,Python,Python 3.x,我是Python新手,我正在尝试运行一个简单的代码,它总结了数组项,大于0,小于10 您可以,请查看我的代码-无法获取,为什么它仍然汇总所有输入的数字: import sys print ("Hello word") data = sys.stdin.readline() tokens = data.split() for i in range(len(tokens)): tokens[i] = int(tokens[i]) for token in tokens: if

我是Python新手,我正在尝试运行一个简单的代码,它总结了数组项,大于0,小于10

您可以,请查看我的代码-无法获取,为什么它仍然汇总所有输入的数字:

import sys

print ("Hello word")
data = sys.stdin.readline()
tokens = data.split()

for i in range(len(tokens)):
    tokens[i] = int(tokens[i])

for token in tokens:
    if (token > 0 & token < 10):
        b = sum(tokens)
    else:
        print("err")



print (b)
导入系统 打印(“Hello word”) data=sys.stdin.readline() tokens=data.split() 对于范围内的i(len(令牌)): 令牌[i]=int(令牌[i]) 对于令牌中的令牌: 如果(令牌>0&令牌<10): b=总和(代币) 其他: 打印(“错误”) 印刷品(b)
每当一个令牌大于0且小于10时,您将b设置为等于所有令牌的总和(与这些令牌的值无关)。你应该:

  • 创建一个“过滤”列表并将其相加
  • 自己写“总数”
第二种方法如下所示:

b = 0
for token in tokens:
    if (token > 0 & token < 10):
        b = b + token
    else:
        print("err")
b=0
对于令牌中的令牌:
如果(令牌>0&令牌<10):
b=b+令牌
其他:
打印(“错误”)

也就是说,您的代码不是很“pythonic”(这意味着它没有使用python提供的处理问题的功能)。for循环不仅可以向上计数整数变量(如java
for(int i=0;i您应该使用
而不是
&
&
和:

x&y

执行“按位and”。如果x和y的对应位为1,则输出的每一位为1,否则为0

你应该做什么:

for token in tokens:
    if token > 0 and token < 10:
      ....

您还可以在
sum
ming时,
filter
过滤超出所需范围的整数:

>>> tokens = ['1','2','3','5','10','11', '4', '6']
>>> sum(filter(lambda x: 0 < x < 10, map(int, (x for x in tokens))))
21
分析这两种方法,可导致:

>>> timeit.timeit('sum(filter(lambda x: 0<x<10, map(int, (x for x in tokens))))', "tokens = ['1','2','3','5','10','11', '4', '6']", number=10**5)
0.2696745040011592
>>> 
>>> timeit.timeit('sum(i for i in(int(x) for x in tokens) if 0 < i < 10)', "tokens = ['1','2','3','5','10','11', '4', '6']", number=10**5)
0.24827877001371235

>>timeit.timeit('sum(filter)(lambda x:0为什么要使用
stdin.readline()
?什么是
数据
?请创建一个示例,如果其中一个条件未填充或只是对筛选列表求和,是否要引发错误?是否有理由使用
sys.stdin.readline()
而不是内置的??稍微过度杀戮-您可以避免
过滤
lambda
映射
并使用带有
sum
的gen exp,这将在2.x as和3.x中具有完全相同的行为-例如:
sum(i代表i in(int(t)代表t in令牌),如果0
data = sys.stdin.readline()
tokens = data.split()

print (sum(token for token in map(int, tokens.split(",")) if 0 < token < 10))
>>> tokens = ['1','2','3','5','10','11', '4', '6']
>>> sum(filter(lambda x: 0 < x < 10, map(int, (x for x in tokens))))
21
>>> sum(i for i in (int(x) for x in tokens) if 0 < i < 10)
>>> timeit.timeit('sum(filter(lambda x: 0<x<10, map(int, (x for x in tokens))))', "tokens = ['1','2','3','5','10','11', '4', '6']", number=10**5)
0.2696745040011592
>>> 
>>> timeit.timeit('sum(i for i in(int(x) for x in tokens) if 0 < i < 10)', "tokens = ['1','2','3','5','10','11', '4', '6']", number=10**5)
0.24827877001371235