2017-11-08 17 views
0

私は新しいPythonラーナーです。私は以下のようないくつかのコードで停止した。Pythonリストのスライス範囲

return ['FizzBuzz'[i%-3&-4:i%-5&8^12]or`i`for i in range(1,n+1)] 

特にそれが何を意味する:[i%-3&-4:i%-5&8^12]

はどうもありがとうございました!

+7

ここで、あなたはPythonを初めて使用する場合、このようなコードに遭遇していますか? – 0TTT0

+2

このようなコードは、実際のプログラムでは使用しないでください。 Pythonを理解するのに役立つものではありません(一部のプログラマーが持っている "楽しい"という奇妙な定義を理解するためだけです)。https://codegolf.stackexchange.com/ –

+0

@ 0TTT0。 [LeetCode](https://github.com/kamyu104/LeetCode/blob/master/Python/fizz-buzz.py)。 – ekhumoro

答えて

2

:は、範囲記号です。つまり、開始点と終了点の間のリスト要素をlist[start:end]に入れてください。

i%-3&-4

排他mod(i, -3) & -4

^に等しいか、または:

%

&バイナリ(ビット単位)およびオペレータ、第1の部分は、モジュロ演算子でありますオペレータですので、2番目の部分:

i%-5&8^12

mod(i, -5) & 8^12

に等しいモジュロ演算子は、第によって最初の引数の除算の剰余を与えます。

あなたはバックチック ``、または文が1 to n+1の範囲を返した後、最後の部分なしで、コメントで述べたようにPythonのバイナリ(ビット単位)演算子look here

についての詳細を知る必要がある場合結果の最初のリストが空の場合。

このステートメントのバックティックは、repr()関数のPython2構文です。 詳細については、repr documentationを参照してください。

+0

と 'または'部分はバックティック? –

+0

@PeterWood私はバックティックを理解していませんが、文字列スライスが空であれば 'i'の値が使われます –

+1

@PatrickHaugh。バッククォートは、 'repr(i)'のスペルを非難する方法です - 質問のコードはpython2です。 – ekhumoro

関連する問題