Python:单冒号与双冒号

时间:2016-07-02 13:21:46

标签: python numpy slice colon

在这种情况下,单结肠和双结肠有什么区别?  data[0:,4] vs data[0::,4]

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

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

我尝试将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 个答案:

答案 0 :(得分:10)

,没有区别。

请参阅slice的Python文档:

来自文档:a[start:stop:step]

  

start和step参数默认为None。切片对象有   只读数据属性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::]),您不会以任何方式更改代码的输出。

希望这有帮助。

答案 1 :(得分: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:)是等效的。

答案 2 :(得分:0)

没有区别。您使用相同的slice对象进行索引。

答案 3 :(得分:0)

就像这样: s[start:end:step]。 使用步骤步骤从开始到结束切片。

答案 4 :(得分:0)

在你的情况下,数据是

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

所以它等于

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

在此引文中,列表中只有单个项目,因此数据[0 :: 4]或数据[0:4]不会影响任何事物。

如果您尝试此操作,则会清除您的问题/答案

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

就像

一样
data[start:end:step]

因此,如果您的步长小于数据长度,它就像往常一样。