Python:单冒号与双冒号
Python: single colon vs double colon
这种情况下单冒号和双冒号有什么区别?
data[0:,4]
对比 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']
没有区别。您正在通过相同的 slice
对象进行索引。
没有,没有区别
请参阅 slice 的 Python 文档:
来自文档:a[start:stop:step]
The start and step arguments default to None. Slice objects have
read-only data attributes start, stop and step which merely return the
argument values (or their default).
在这种情况下,您将包含一个空的 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::]
),您不会以任何方式更改代码的输出。
希望这对您有所帮助。
两种语法产生相同的索引。
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:
) 是等效的。
是这样的:
s[start:end:step]
。
从头到尾切片s的步长为step.
在你的案例中,数据是
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] 不会产生任何影响。
如果您尝试这样做,它将清除您的 question/answer
print data[0][0::4]
print data[0][0:4]
它的工作方式类似于
data[start:end:step]
因此,如果您的步长小于数据长度,它的行为与往常一样。
这种情况下单冒号和双冒号有什么区别?
data[0:,4]
对比 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']
没有区别。您正在通过相同的 slice
对象进行索引。
没有,没有区别
请参阅 slice 的 Python 文档:
来自文档:a[start:stop:step]
The start and step arguments default to None. Slice objects have read-only data attributes start, stop and step which merely return the argument values (or their default).
在这种情况下,您将包含一个空的 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::]
),您不会以任何方式更改代码的输出。
希望这对您有所帮助。
两种语法产生相同的索引。
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:
) 是等效的。
是这样的:
s[start:end:step]
。
从头到尾切片s的步长为step.
在你的案例中,数据是
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] 不会产生任何影响。
如果您尝试这样做,它将清除您的 question/answer
print data[0][0::4]
print data[0][0:4]
它的工作方式类似于
data[start:end:step]
因此,如果您的步长小于数据长度,它的行为与往常一样。