2017-03-03 189 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

相關問題