2016-07-02 32 views
7

Sự khác nhau giữa dấu hai chấm đơn và dấu hai chấm trong trường hợp này là gì? data[0:,4] vs data[0::,4]Python: dấu hai chấm đơn và hai dấu hai chấm

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

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

tôi đã cố gắng để thay thế data[0::,4] với data[0:,4] và tôi thấy không có sự khác biệt. Có sự khác biệt nào trong trường hợp này hay trường hợp khác không?

data là mảng 2 chiều với hàng như ['1' '0' '3' 'Braund, Mr. Owen Harris' 'male' '22' '1' '0' 'A/5 21171' '7.25' '' 'S']

Trả lời

5

Không, không có sự khác biệt.

Xem tài liệu Python cho slice:

Từ các tài liệu: a[start:stop:step]

Sự bắt đầu và lập luận bước mặc định là None. Các đối tượng Slice có các thuộc tính dữ liệu chỉ đọc bắt đầu, dừng và bước chỉ trả lại các giá trị đối số (hoặc giá trị mặc định của chúng).

Trong trường hợp này, bạn bao gồm thông số trống step.

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

Và để hiểu những gì các tham số step thực sự thực hiện:

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

Vì vậy, bằng cách rời khỏi nó được ngầm None (ví dụ, bởi một trong hai a[2:] hoặc a[2::]), bạn sẽ không thay đổi sản lượng mã của bạn theo bất kỳ cách nào.

Hy vọng điều này sẽ hữu ích.

0

Không có sự khác biệt. Bạn đang lập chỉ mục bởi một đối tượng slice giống hệt nhau.

4

Cả hai cú pháp đều dẫn đến cùng các chỉ mục.

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) 

Về cơ bản, 1::,6 là một tuple của một lát (1::) và một số (6). Các lát có dạng start:stop[:stride]. Để trống sải chân (1::) hoặc không ghi rõ (1:) là tương đương.

0

Nó giống như sau: s[start:end:step]. Slice s từ đầu đến cuối với bước bước.

0

Trong trường hợp dữ liệu của bạn là

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

Vì vậy, nó là bằng

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

Trong sitation này có mục chỉ duy nhất trong danh sách để dữ liệu [0 :: 4] hoặc dữ liệu [0 : 4] không ảnh hưởng gì.

Nếu bạn cố gắng này nó sẽ xóa câu hỏi của bạn/trả lời

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

Nó hoạt động như

data[start:end:step] 

Vì vậy, nó cư xử như bình thường nếu kích thước bước của bạn là ít sau đó chiều dài dữ liệu.

Các vấn đề liên quan