2011-09-11 2 views
18

목록의 버전을 구현하는 가장 파이썬적인 방법을 찾고 있습니다. extend 함수의 끝 부분 대신 지정된 색인으로 확장됩니다. 명부.목록에 extend()를 추가하여 목록 요소를 끝까지 삽입 할 수 있습니다.

a_list = [ "I", "rad", "list" ]              
b_list = [ "am", "a" ] 
a_list.my_extend(b_list, 1) # insert the items from b_list into a_list at index 1 

print(a_list) # would output: ['I', 'am', 'a', 'rad', 'list'] 

새 목록을 작성하지 않고이를 수행 할 수있는 방법이 있습니까?

a_list = [ "I", "rad", "list" ] 
b_list = [ "am", "a" ] 
c_list = [] 

c_list.extend(a_list[:1]) 
c_list.extend(b_list ) 
c_list.extend(a_list[1:]) 

print(c_list) # outputs: ['I', 'am', 'a', 'rad', 'list'] 

그 방법은 실제로 그렇게 나쁘지는 않지만 쉽게 할 수 있습니다. 그럴 수 있니?

+2

새 목록을 작성하는 데는 아무런 문제가 없지만, 단계별로 수행하는 이유는 무엇입니까? 그것보다 훨씬 간단합니다 :'c_list = a_list [: 1] + b_list + a_list [1 :]'. –

+0

목록에 과부하가 + 있습니다. – mwcz

+0

같은 것을 필요로했지만,'insert'가'unpacked '리스트 요소를'extend'와 비슷한 방식으로 인덱스에 추가하는 동작을하도록 요청하는 경우가 거의 있습니다. 대답은 동일했을 것입니다 :-D – danicotra

답변

41

물론, 당신은 슬라이스 인덱싱을 사용할 수 있습니다 : 당신은 가상의 사용자 정의 list 클래스의 my_extend 기능을 구현한다면

a_list[1:1] = b_list 

그냥, 일반적인 알고리즘을 보여주기 위해, 그 결과는 다음과 같습니다

def my_extend(self, other_list, index): 
    self[index:index] = other_list 

하지만 실제로 그 기능을 만들지 말고 필요할 때만 슬라이스 표기법을 사용하십시오.

+0

하, 나는 그것을 알고 있었다! 나는 그것을 결코 생각하지 않았다. 나는 방금'b_list'의 원소가 아닌,'b_list' 전체를 인덱스 1의'a_list'에 넣을 것이라고 가정했습니다. 분명히 슬라이스의 복잡성을 검토해야합니다. 감사합니다. – mwcz

+2

나는이 솔루션이 마음에 들지만, 파이썬 원칙에 약간 반대한다. 왜냐하면 어떤 일이 일어날 지 즉시 알 수 없기 때문이다. 오히려 연장을위한 선택적 논의가 있었으면 좋겠다. – Stan

+2

나는 표기를 자르면 익숙해 져야한다. 바라건대'the_list [i : j] = other_list'는'i j' ('the_list [5 : 3] = other_list'와 같은)에 대해서 이야기한다면, 나는 그것이 어떨지 직관적으로 명백하지 않다는 것에 확실히 동의 할 것입니다. 그러나 나는 실제로 그 구문을 생각하지 않습니다. 어쨌든 작동합니다. –

관련 문제