반응형
더 큰 목록에서 모든 n 번째 항목의 목록을 반환하는 Pythonic 방법
우리가 0에서 1000까지의 숫자 목록을 가지고 있다고 가정 해보십시오. 첫 번째 및 모든 후속 10 번째 항목의 목록을 생성하는 파이썬적이고 효율적인 방법이 [0, 10, 20, 30, ... ]
있습니까?
예, for 루프를 사용 하여이 작업을 수행 할 수 있지만 한 줄로도 더 깔끔한 방법이 있는지 궁금합니다.
>>> l = range(165)
>>> l[0::10]
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160]
편집 : 재미를 위해 약간의 타이밍 비교 (경계 조건 무시) :
$ python -m timeit -s "l = range(1000)" "l1 = [x for x in l if x % 10 == 0]"
1000 loops, best of 3: 525 usec per loop
$ python -m timeit -s "l = range(1000)" "l1 = l[0::10]"
100000 loops, best of 3: 4.02 usec per loop
source_list[::10]
가장 명백하지만 반복 가능한 경우 작동하지 않으며 큰 목록의 경우 메모리 효율적이지 않습니다.itertools.islice(source_sequence, 0, None, 10)
iterable에 대해 작동하고 memery 효율적이지만 큰 목록과 큰 단계에 가장 빠른 솔루션은 아닙니다.(source_list[i] for i in xrange(0, len(source_list), 10))
다음과 같이 슬라이스 연산자를 사용할 수 있습니다.
l = [1,2,3,4,5]
l2 = l[::2] # get subsequent 2nd item
수동에서 : s[i:j:k] slice of s from i to j with step k
li = range(100)
sub = li[0::10]
>>> sub
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
newlist = oldlist[::10]
목록의 10 번째 요소마다 선택됩니다.
existing_list = range(0, 1001)
filtered_list = [i for i in existing_list if i % 10 == 0]
왜 range 함수 의 step 매개 변수를 사용 하여 얻을 수 있습니까?
l = range(0, 1000, 10)
비교를 위해 내 컴퓨터에서
H:\>python -m timeit -s "l = range(1000)" "l1 = [x for x in l if x % 10 == 0]"
10000 loops, best of 3: 90.8 usec per loop
H:\>python -m timeit -s "l = range(1000)" "l1 = l[0::10]"
1000000 loops, best of 3: 0.861 usec per loop
H:\>python -m timeit -s "l = range(0, 1000, 10)"
100000000 loops, best of 3: 0.0172 usec per loop
다음은 멤버십 테스트의 일부로 목록 컨텐츠를 사용하지 않는 "모든 10 번째 항목"목록 이해의 더 나은 구현입니다.
>>> l = range(165)
>>> [ item for i,item in enumerate(l) if i%10==0 ]
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160]
>>> l = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
>>> [ item for i,item in enumerate(l) if i%10==0 ]
['A', 'K', 'U']
그러나 이것은 목록 슬라이싱을 사용하는 것보다 훨씬 느립니다.
이를 위해 목록 이해가 정확하게 이루어집니다.
smaller_list = [x for x in range(100001) if x % 10 == 0]
파이썬 공식 문서에서 더 많은 정보를 얻을 수 있습니다 : http://docs.python.org/tutorial/datastructures.html#list-comprehensions
반응형
'programing tip' 카테고리의 다른 글
Java 현재 컴퓨터 이름과 로그인 한 사용자? (0) | 2020.06.16 |
---|---|
ASP.NET MVC에서 모델 상태 오류 수집을 어떻게 얻습니까? (0) | 2020.06.16 |
SecureString을 System.String로 변환하는 방법? (0) | 2020.06.16 |
C에서 "콜백"이란 무엇이며 어떻게 구현됩니까? (0) | 2020.06.16 |
Objective-C에서 NSString 토큰 화 (0) | 2020.06.16 |