2016-11-14 2 views
0

my_list[:3]을 사용하여 목록의 처음 세 요소를 찾으려고합니다. 그러나 목록의 길이가 적어도 3이 될 것이라고 보장 할 수는 없습니다.콜론 (:)을 파이썬에서 슬라이스리스트로 사용할 때리스트의 길이보다 큰 정지 크기를 사용할 수 있습니까?

주어진 목록과 작은 정지로만 예제를 찾을 수 있습니다. 따라서 목록 길이를 확인하지 않고 my_list[:3]이 허용되는지 여부를 알고 싶습니다.

감사합니다.

나는 혼자 노력했지만 잘 작동합니다. 그러나 나는 의사에 대한 설명이 있는지보고 싶다.

+0

예, 정상적으로 작동합니다. –

+8

Stack Overflow에서 질문을 작성하는 것보다 쉘에서 테스트하는 데 시간이 훨씬 더 걸립니다. 파이썬은 대화 형이므로 상호 작용합니다. –

+1

리스트가 더 짧고 3 원소가 있다면'[: 3]'은 에러없이 더 적은 원소를줍니다. 그래서'my_list [: 3]'의 세번째 원소가 필요하면 길이를 검사해야합니다. – furas

답변

0

을 감안할 때 :

>>> li=[1,2,3] 

고려해야 할 정말 두 경우가 있습니다.

1)에서의 단부를 넘어 연장되는 슬라이스가 그 정의 요소의 겹침 오류없이 이후 빈리스트 제공 할 경우

>>> li[2:] 
[3] 
>>> li[3:] 
[] 
>>> li[5555:] 
[] 
>>> li[1:55555] 
[2, 3] 
>>> li[555:55555] 
[] 

2)이 주어 슬라이스 할당, 중복 오류없는 요소가 대체되고 나머지 원소가 추가된다

>>> li[1:5]=[12,13,14,15,16] 
>>> li 
[1, 12, 13, 14, 15, 16, 15] 
>>> li[555:556]=[555,556] 
>>> li 
[1, 12, 13, 14, 15, 16, 15, 555, 556] 

이 지난 경우, 슬라이스 할당 따라서 단지 기존 엘리먼트에 부가 하였다 않은 비 기존 요소 하였다.

>>> li 
[1, 2, 3] 
>>> li[1:7:2]=range(4) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: attempt to assign sequence of size 4 to extended slice of size 1 

: 오른쪽 조각은 왼쪽에 기존 요소와 일치하지 않는 경우

그러나, 확장 된 조각이 아닌 기존의 요소 (즉, 당신이 list_object[start:stop:step]이있는 경우)에 대한 ValueError있을 수 있습니다 그러나 기존의 경우 슬라이스 할당을 확장 할 수 있습니다.

>>> li=['X']*10 
>>> li 
['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'] 
>>> li[1:10:2]=range(5) 
>>> li 
['X', 0, 'X', 1, 'X', 2, 'X', 3, 'X', 4] 

대부분의 경우 예상대로 작동합니다. 할당을위한 단계를 사용하려면 요소가 있어야합니다.

1

목록의 길이에 관계없이 괜찮습니다. 당신이 원하는대로

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

는 본질적으로 정확히 작동합니다 :

당신이 만들려고 노력하고있는 호출의 동작입니다.

관련 문제