我有一個數字範圍從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的號碼?
我有一個數字範圍從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的號碼?
你可以這樣來做:
print [i for i in range(1, 101) if '1' in str(i)]
@Kasramvd我不同意你的看法。提問者沒有規定任何性能要求。所以這是答案中最正確的方式。 – Szabolcs
一些基準測試: '>>> 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
這裏有一種方法:
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]
你注意到你拼寫'remainder'錯誤? – WhatsThePoint
'範圍(101)'列出了從'0'到'100'不'1'到'100' – Szabolcs
試試這個打印列表,如果你不想int
到str
轉換:
_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))))
是一個字符串或列表?請更具體地說。另外,你有什麼嘗試? –