홀수 위치에서 리스트 요소 추출
그래서 기존 목록의 하위 목록인 목록을 만들고 싶습니다.
예를들면,
L = [1, 2, 3, 4, 5, 6, 7]
li
li
모든 되어 있습니다.L
홀수 위치에서
내가 할 수 있을 때
L = [1, 2, 3, 4, 5, 6, 7]
li = []
count = 0
for i in L:
if count % 2 == 1:
li.append(i)
count += 1
하지만 더 적은 스텝 수로 효율적으로 같은 작업을 수행할 수 있는 다른 방법이 있는지 알고 싶습니다.
솔루션
네, 다음 작업을 수행할 수 있습니다.
l = L[1::2]
이치노과 같은됩니다.0
첫 에 있습니다.0
두 at , at at1
삭제:
1, 3, 5
따라서 결과(숫자)는 다음과 같습니다.
2, 4, 6
설명.
[1::2]
마지막은 목록 슬라이싱의 표기법일 뿐입니다.상은,, 음음음음음 음음음음음
some_list[start:stop:step]
★★★★★★★를 생략했을 경우start
)0
가 사용됩니다. 첫 번째 (에 있음)0
이기 0
가이 경우 두 번째 요소가 선택됩니다.
두 번째 요소가 생략되어 있기 때문에 기본값(목록 끝)이 사용됩니다.따라서 목록은 두 번째 요소에서 끝까지 반복됩니다.
또, 3번째의 인수(step
즉 ), ,, ,,2
즉, 하나의 요소가 선택되고, 다음 요소는 건너뛰게 됩니다.
이 엔, 이 경우엔요.[1::2]
다음과 같습니다.
- 두 번째 요소(지수로 판단하면 이상한 요소)를 취한다.
- 요소를
step=2
죠,로요.step=1
(입니다. - 다음 요소를 취합니다.
- 리스트의 끝에 도달할 때까지, 순서 2-3을 반복합니다.
편집: @PreetKukreti는 Python의 목록 슬라이싱 표기법에 대한 다른 설명을 위한 링크를 제공했습니다.여기를 참조: Python의 슬라이스 표기법을 설명합니다.
-를 타타 - 음음음음음음음음으로 .enumerate()
코드에서는 카운터를 명시적으로 작성 및 증가시킵니다.Python 에서는, 다음과 같이 반복할 수 있기 때문에, 이것은 필요 없습니다.
for count, i in enumerate(L):
if count % 2 == 1:
l.append(i)
위의 내용은 사용하던 코드와 정확히 동일한 목적으로 사용됩니다.
count = 0
for i in L:
if count % 2 == 1:
l.append(i)
count += 1
에 대한 for
Python에서는 카운터가 있는 루프:Python 'for' 루프에서 인덱스 액세스
홀수 포지션의 경우 다음과 같은 경우가 있습니다.
>>>> list_ = list(range(10))
>>>> print list_[1::2]
[1, 3, 5, 7, 9]
>>>>
수학(세트) 구문 때문에 리스트 컴플리션을 좋아합니다.그럼 이건 어때?
L = [1, 2, 3, 4, 5, 6, 7]
odd_numbers = [y for x,y in enumerate(L) if x%2 != 0]
even_numbers = [y for x,y in enumerate(L) if x%2 == 0]
기본적으로 목록을 열거하면 인덱스를 얻을 수 있습니다.x
그리고 가치y
제가 여기서 하고 있는 것은 가치 있는 그대로 두는 것입니다.y
출력 목록(짝수 또는 홀수)에 포함시키고 인덱스를 사용합니다.x
그 점이 이상한지 아닌지를 알아내다.x%2 != 0
).
를 사용할 수도 있습니다.itertools.islice
를 작성할 필요가 없는 경우list
단, 홀수/짝수 요소를 반복하고 싶을 뿐입니다.
import itertools
L = [1, 2, 3, 4, 5, 6, 7]
li = itertools.islice(l, 1, len(L), 2)
비트 AND 연산자를 사용할 수 있습니다.&
:
>>> x = [1, 2, 3, 4, 5, 6, 7]
>>> y = [i for i in x if i&1]
[1, 3, 5, 7]
그러면 목록의 이상한 요소가 표시됩니다.홀수 인덱스에서 요소를 추출하려면 위의 몇 가지 변경만 하면 됩니다.
>>> x = [10, 20, 30, 40, 50, 60, 70]
>>> y = [j for i, j in enumerate(x) if i&1]
[20, 40, 60]
설명.
Bitwise AND 연산자는 1과 함께 사용되며, 이 연산자가 작동하는 이유는 이진수로 쓸 때 홀수가 1로 첫 번째 자리수를 가져야 하기 때문입니다.확인합시다.
23 = 1 * (2**4) + 0 * (2**3) + 1 * (2**2) + 1 * (2**1) + 1 * (2**0) = 10111
14 = 1 * (2**3) + 1 * (2**2) + 1 * (2**1) + 0 * (2**0) = 1110
값이 홀수인 경우 AND 연산에서는 1만 반환됩니다(2진수에서 1은 마지막 자리 1도 포함).
자세한 내용은 Python Bitwise Operator 페이지를 참조하십시오.
추신: 데이터 프레임에서 홀수 열과 짝수 열을 선택하려면 이 방법을 사용할 수 있습니다.얼굴 키포인트의 x좌표와 y좌표가 x1, y1, x2열로 주어졌다고 칩시다.각 이미지의 폭 및 높이 값으로 x 및 y 좌표를 정규화하려면 다음을 수행합니다.
for i in range(df.shape[1]):
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
이는 질문과는 정확히 관련이 없지만 데이터 과학자와 컴퓨터 비전 엔지니어에게 이 방법은 유용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/12433695/extract-elements-of-list-at-odd-positions
'programing' 카테고리의 다른 글
큰따옴표 또는 작은따옴표를 삽입하는 방법 (0) | 2023.04.12 |
---|---|
Git 커밋 카운트를 얻으려면 어떻게 해야 하나요? (0) | 2023.04.12 |
panda xlsxwriter, 표 머리글 형식 지정 - 시트 머리글 아님 (0) | 2023.04.12 |
VB에 조건부 3진 연산자가 있습니까?인터넷? (0) | 2023.04.12 |
SDK 'iOS 10.0'의 제품 유형 '응용 프로그램'에 코드 서명이 필요합니다. StickerPackExtension은 개발팀의 오류가 필요합니다. (0) | 2023.04.12 |