단일 값을 생략하는 범위 (생성자 또는 목록)를 작성하는 가장 간단한 방법은 무엇입니까? 그래서 n
(독점)에 있지만 k
없이 0
(포함)로부터 k
< n
≤ 0
와 정수 모든 정수를 n
및 k
를 원하는 주어진.범위에서 하나의 값 생략하기
0
A
답변
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__
에 접근하는 것은 청중에 따라 "어느 정도 읽기 쉬운"목표를 위반할 수 있습니다.)
Python으로 이것을 작성하는 가장 짧은 방법이 필요한 이유가 있습니까? ? –
@ ZeroPiraeus : 그냥 궁금해서. 따라서 이것을 코드 골프의 의미에서 엄격한 최적이라고 생각하지 마십시오. 일상 생활에서 사용하기에 적합하고 실용적이어야합니다. – MvG