2016-07-02 1 views
7

この場合、シングルコロンとダブルコロンの違いは何ですか?Python:シングルコロン対ダブルコロン

women_only_stats = data[0::,4] == "female" 

men_only_stats = data[0::,4] != "female" 

data[0:,4]data[0::,4]私はdata[0:,4]data[0::,4]を交換しようとしたと私は何の違いを見ていません。これと別の場合に違いはありますか?

data

には差がない['1' '0' '3' 'Braund, Mr. Owen Harris' 'male' '22' '1' '0' 'A/5 21171' '7.25' '' 'S']

答えて

5

いいえ、違いはありません。ドキュメントから

:Noneにa[start:stop:step]

開始とステップの引数デフォルト

sliceのためのPythonドキュメントを参照してください。スライスオブジェクトには、 の読み取り専用データ属性start、stop、stepがあり、引数の値(またはデフォルト値)を返すだけです。

この場合、空のstepパラメータが含まれています。

>>> a = [1,2,3,4] 
>>> a[2:] 
[3,4] 
>>> a[2::] 
[3,4] 
>>> a[2:] == a[2::] 
True 

そしてstepパラメータが実際に何をするかを理解する:

>>> b = [1,2,3,4,5,6,7,8,9,10] 
>>> b[0::5] 
[1, 6] 
>>> b[1::5] 
[2, 7] 

だから、暗黙的にNone(すなわち、a[2:]またはa[2::]のいずれかにより)、あなたは出力を変更するつもりはないことを、それを残すことによってあなたのコードの

これが役に立ちます。

0

ような行の2次元配列です。同一のsliceオブジェクトでインデックスを作成しています。

4

どちらの構文でも同じインデックスが作成されます。

class Foo(object): 
    def __getitem__(self, idx): 
    print(idx) 

Foo()[1::,6] 
# prints (slice(1, None, None), 6) 
Foo()[1:,6] 
# prints (slice(1, None, None), 6) 

基本的に、1::,6スライス(1::)と番号(6)のタプルです。スライスの形式はstart:stop[:stride]です。ストライドブランク(1::)またはそれを記載しない(1:)のままにすることは同等です。

0

s[start:end:step]のようです。 ステップステップを使用して、最初から最後までスライスします。あなたのケースデータに

0

data = ['1' '0' '3' 'Braund, Mr. Owen Harris' 'male' '22' '1' '0' 'A/5 21171' '7.25' '' 'S'] 

あるので、それだけで単一の項目がリストにあります。このsitationで

data = ['103Br.............7.25S'] 

に等しいので、データ[0 :: 4]またはデータ[0 :4]は何にも影響しません。

あなたはこれをしようとすると、それはそれはあなたのステップサイズは、データ長、次に小さいのであれば、それはいつものように振る舞う

data[start:end:step] 

のように動作し、あなたの質問/答え

print data[0][0::4] 
print data[0][0:4] 

がクリアされます。

関連する問題