Python 如何总结数组';s项大于、大于0、小于10
我是Python新手,我正在尝试运行一个简单的代码,它总结了数组项,大于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
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