2017-03-03 9 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( '__main__インポートcontain_oneから' 'リスト(フィルタ(contain_one、範囲(101)))'、セットアップ=、番号= 1000)' ' 0.031100595099559314''> >> timeit.timeit( "[str(i)の '1'の場合は[i]の範囲(1,101)にあります)、 ' 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

'残りは間違っていますか? – WhatsThePoint

+2

'range(101)'は '0'から '100'ではなく '1'から '100'までの数字をリストします – Szabolcs

0

あなたはstrintを変換したくない場合は、リストを印刷し、これを試してみてください。

_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

'range(100)'は0から99までの数字を与えます – Dmitry

+1

'lambda x:" 1 "in str(x ) 'で十分であれば、' else None'は必要ありません – Dmitry

関連する問題