2017-03-03 92 views
-1

我有一个数字范围从1到100,但我只想打印所有包含1层的在该范围内的号码。如何打印包含1的数字?

例如:

1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 31, 41, 51, 61, 71, 81, 91, 100 

我将如何打印包含1的号码?

+2

是一个字符串或列表?请更具体地说。另外,你有什么尝试? –

回答

7

你可以这样来做:

print [i for i in range(1, 101) if '1' in str(i)] 
+2

@Kasramvd我不同意你的看法。提问者没有规定任何性能要求。所以这是答案中最正确的方式。 – Szabolcs

+1

一些基准测试: '>>> timeit.timeit('list(filter(contains_one,range(101)))',setup ='from__main__ import contains_one',number = 1000)' '0.031100595099559314' '>> >> timeit.timeit( “[如果 '1' STR我对于i在范围(1,101)(ⅰ)]”,数= 1000)'' 0.020970157049845284' – Szabolcs

1

这里有一种方法:

In [5]: def contain_one(num): 
    ...:  while num: 
    ...:   remainder = num%10 
    ...:   if remainder == 1: 
    ...:    return True 
    ...:   num = num // 10 
    ...:   

In [6]: list(filter(contain_one, range(101))) 
Out[6]: [1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 31, 41, 51, 61, 71, 81, 91, 100] 
# Or use a list comprehension: 
In [8]: [i for i in range(101) if contain_one(i)] 
Out[8]: [1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 31, 41, 51, 61, 71, 81, 91, 100] 
+1

你注意到你拼写'remainder'错误? – WhatsThePoint

+2

'范围(101)'列出了从'0'到'100'不'1'到'100' – Szabolcs

0

试试这个打印列表,如果你不想intstr转换:

_filter_=lambda x:x if x%10==1 or x==1 or x==100 or 10<=x<20 else None 

print filter(_filter_,range(1,101)) 

print filter(lambda x:x if "1" in str(x) else None,range(1,101)) 

或字符串

print ",".join(map(str,filter(lambda x:x if "1" in str(x) else None,range(1,101)))) 
+0

号码'范围(100)'给出编号从0到99 – Dmitry

+1

'拉姆达X: “1”,在STR(X )'就足够了,否则不需要'None' – Dmitry

相关问题