我有一个数字范围从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))))
是一个字符串或列表?请更具体地说。另外,你有什么尝试? –