ループ バリアントは、ループ内の引数によって定義される、厳密に減少する自然数であると想定されています。インデックスが使用されていないため、Python では少し難しいと思います。たとえば、次の文のループ バリアントは何ですか?
P = [int(x) for x in list('{0:b}'.format(12))]
理解するには、分解する必要があります。
format
12 のバイナリ表現を指定できます。
>>> '{0:b}'.format(12)
'1100'
使用することもできますbin
が'0b'
、最初に追加します:
>>> bin(12)
'0b1100'
ただし、書くことはできますbin(12)[2:]
(別の回答で提案されているように)。
次のようにして、ループを使用して文字列の各文字を反復処理できます。
for x in '1100':
このx
for ループでは、文字列の連続する文字が取得されます: '1', '1', '0', '0'
。
最後に[... for x in ...]
、リスト内包表記です。これにより、for を使用して新しいリストが作成されます。
[int(x) for x in '1100']
次と同等です。
list(map(int, '1100'))
と:
list(map(int, ['1', '1', '0', '0']))
また:
l = []
for x in '1100':
l.append(int(x))
あなたの質問は実際には次のとおりです。ここでのループバリアントは何ですか?
Python では、for
は実際にはもっとforeach
. 例として取り上げましょうfor x in [3, 2, 10]
。は、値、およびx
を連続して受け取ります。3
2
10
C スタイルの for ループに近いものが必要な場合:
// C for-loop:
for (int i = 0; i < 10; i++)
私達は書く:
# Python for-loop:
for i in range(10):
range(10)
は反復可能なものを返しi
、 で指定された連続する値を取りますrange
。
例に戻ると、「ループバリアント」はありませんが、必要な場合は次を使用できますenumerate
。
for i, x in enumerate('1100'):
print(i, x)
あげる:
(0, '1')
(1, '1')
(2, '0')
(3, '0')