0

ループ バリアントは、ループ内の引数によって定義される、厳密に減少する自然数であると想定されています。インデックスが使用されていないため、Python では少し難しいと思います。たとえば、次の文のループ バリアントは何ですか?

P = [int(x) for x in list('{0:b}'.format(12))]
4

3 に答える 3

1

理解するには、分解する必要があります。

12 のバイナリ表現

format12 のバイナリ表現を指定できます。

>>> '{0:b}'.format(12)
'1100'

使用することもできますbin'0b'、最初に追加します:

>>> bin(12)
'0b1100'

ただし、書くことはできますbin(12)[2:](別の回答で提案されているように)。

文字列の反復

次のようにして、ループを使用して文字列の各文字を反復処理できます。

for x in '1100':

このxfor ループでは、文字列の連続する文字が取得されます: '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を連続して受け取ります。3210

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')
于 2013-11-13T11:22:51.600 に答える