2014-02-22 3 views
0

하나의 목록의 내용을 선택 범위에서만 다른 목록에 추가하려고합니다. 700 개가 넘는 요소 목록을 만들고 싶습니다. 34 번째 요소부터 시작하여 이후 11 번째 요소를 모두 가져오고 싶습니다. 하지만이 문제가 존재하지 않는 요소를 가리켜 야한다는 것을 알고있는 범위를 벗어난 색인을 해결하는 데 약간의 문제가 있습니다. 또한 목록의 크기가 그것을 통해 계산 됨으로써 영향을 받는다는 것도 알고 있습니다. 나는 파이썬으로 약간 경험이 없기 때문에이 경우 그것을 막는 방법을 모르겠습니다. 누구든지이 색인을 범위 밖의 문제로 해결할 수 있다면 큰 도움이 될 것입니다.범위를 벗어나는 인덱스 해결 Python

main_list = [] 

for i in range(705): 
    main_list.append(i) 

sublist = [] 

def my_range(start, end, step): 
    while start <= end: 
     yield start 
     start += step 

for x in my_range(34, 705, 11): 
    sublist.append(main_list[x]) 

print sublist 
+1

: 왜 단순히'main_list = 범위 (705)'? 여분의 루프를 만들 필요가 없습니다. – DSM

+0

@DSM 전체를 필요로하지 않으며, range (34, 705, 11)는'sublist'를 제공합니다. – msvalkon

+1

또 다른 지름길은 :'sublist = main_list [34 :: 11]' – hpaulj

답변

6

파이썬 색인 기반의 제로 :

여기 내 코드입니다. 마지막 요소는 인덱스 len(my_list)-1입니다. 라인을 변경해야합니다 while start <= end:while start < end:

어쨌든 xrange을 다시 구현 한 것 같습니다.

+0

알게되었습니다. 고맙습니다. – David

1

약간 간접적이지만,이 문제에 더 잘 접근하기 위해 할 수있는 몇 가지 방법이 있습니다. 우선,이 :

main_list = [] 

for i in range(705): 
    main_list.append(i) 

는 범위 목록을 반환, 그래서 반복하여 다른 하나를 채울 필요가 없습니다

main_list = range(34, 705) 

으로 수행 될 수 있습니다. 둘째, 목록의 11 번째 요소를 다룰 수있는 몇 가지 방법이 있지만, 개인적 취향에 따라 이와 같은 것을 볼 때 일은 합동 클래스로 생각하는 것입니다. 실제로 아마 것

sub_list = [] 
def eleventh_element(a_list): 
    for elem in a_list: 
     if (elem - 34) % 11 == 0: 
      sub_list.append(elem) 

있지만 : 그래서 다음 기능 같은 것을 사용하십시오

sub_list = filter(lambda x: not ((x - 34) % 11), range(34, 705)) 

기부 : 제외

>>> sub_list = filter(lambda x: not ((x - 34) % 11), range(34, 705)) 
>>> sub_list 
[34, 45, 56, 67, 78, 89, 100, 111, 122, 133, 144, ...and so on... 
+0

'sub_list = [xrange (34, 705, 11)에있는 x에 대한]'이 작업을 수행합니다. 'range'와'xrange' 함수에'step' 인수를 제공 할 수 있다는 것을 기억하십시오. – msvalkon

+0

내가 말했듯이, 나는 수학 배경을 고려할 때 합동 수업이라고 생각하는 것을 선호한다. 비록 후자가 더 빠르더라도 & 1 대신에 % 2만큼 홀수 대 홀수를 결정하는 것과 같은 이유입니다. – JackGibbs

+0

적어도 파이썬 2에서 가장 짧은 해결책은'range (34, 705, 11)'입니다.'xrange x in x (34, 705, 11)]''줄은'list (xrange 34, 705, 11))'(또는 파이썬 3에서'list (range (34, 705, 11))'). – YXD

관련 문제