2014-06-23 4 views
0

단일 값을 생략하는 범위 (생성자 또는 목록)를 작성하는 가장 간단한 방법은 무엇입니까? 그래서 n (독점)에 있지만 k없이 0 (포함)로부터 k < n0와 정수 모든 정수를 nk를 원하는 주어진.범위에서 하나의 값 생략하기

+0

Python으로 이것을 작성하는 가장 짧은 방법이 필요한 이유가 있습니까? ? –

+0

@ ZeroPiraeus : 그냥 궁금해서. 따라서 이것을 코드 골프의 의미에서 엄격한 최적이라고 생각하지 마십시오. 일상 생활에서 사용하기에 적합하고 실용적이어야합니다. – MvG

답변

3

귀하의 목록은 0에서 n까지 실행되므로 목록의 n에 대해 ns, ns.index(n) == n입니다. (. ns[0] == 0, ns[1] == 1 등) 그와

마음에, 당신은 이런 식으로 목록을 슬라이스 수 :

ns = range(n) 
ms = ns[:k] + ns[k+1:] 

틀림없이 짧은뿐만 아니라, 틀림없이 명확하지, 당신까지 이렇게!

2

내가 지금까지 발견 한 가장 짧은 솔루션은

[i for i in range(n) if i != k] 

이다 그러나 아마 짧은 것이 있습니다. 여기서 문제는 Python 2에서 변수 i이 주변 범위로 유출되어 일부 경우에 성가신 일이 될 수 있다는 것입니다.

+0

_ "아마도 짧은 것이 있습니다."_ 예, '(i) i가 범위라면 (i)! i = k]';-) – Kevin

2

목록 이해 솔루션보다 약간 짧은 :

sorted(set(range(n))-{k}) 

...하지만 내 생각에, 아마 빨리 또는 이해할 수 없습니다.

1

다시 발전기로 결과를 원하는 경우. 더 나은 성능과 어쩌면 또한 Kevin's set operation approach보다

filter(k.__ne__, range(n)) 

(한 문자 이상하지만, 아마도 더 많은 메모리를 효율적으로 또한, 이럴 더 나은 의미 맞게 반면 낮은 레벨의 ish.__ne__에 접근하는 것은 청중에 따라 "어느 정도 읽기 쉬운"목표를 위반할 수 있습니다.)