Bạn có thể sử dụng bitwise và toán tử &
:
>>> x = [1, 2, 3, 4, 5, 6, 7]
>>> y = [i for i in x if i&1]
[1, 3, 5, 7]
Điều này sẽ cung cấp cho bạn các yếu tố kỳ lạ trong danh sách. Bây giờ để trích xuất các phần tử tại các chỉ số lẻ mà bạn chỉ cần thay đổi một chút trên:to extract the elements at odd indices you just need to change the above a bit:
>>> x = [10, 20, 30, 40, 50, 60, 70]
>>> y = [j for i, j in enumerate[x] if i&1]
[20, 40, 60]
Giải trình
BitWise và toán tử được sử dụng với 1 và lý do nó hoạt động là bởi vì, số lẻ khi được viết bằng nhị phân phải có chữ số đầu tiên là 1. Hãy kiểm tra:
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
Và hoạt động với 1 sẽ chỉ trả về 1 [1 trong nhị phân cũng sẽ có chữ số cuối cùng 1], iff giá trị là lẻ.
Kiểm tra trang toán tử Python bitwise để biết thêm.
P.S: Bạn có thể sử dụng phương pháp này một cách khéo léo nếu bạn muốn chọn các cột lẻ và thậm chí cả trong một khung dữ liệu. Giả sử tọa độ x và y của các điểm khóa khuôn mặt được đưa ra dưới dạng cột X1, Y1, X2, v.v.
for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
Điều này không liên quan chính xác đến câu hỏi nhưng đối với các nhà khoa học dữ liệu và kỹ sư tầm nhìn máy tính, phương pháp này có thể hữu ích.
Làm thế nào tôi có thể có được các chỉ số lẻ của một danh sách?
Viết chương trình Python để chọn các mục lẻ của danh sách.
Trình bày bằng hình ảnh về số lẻ:
Giải pháp mẫu:-:-
Mã Python:
x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print[x[::2]]
Đầu ra mẫu:
[1, 3, 5, 7, 9]
Flowchart:
Số lẻ từ 1 đến 100:
Trực quan hóa thực thi mã Python:
Công cụ sau đây trực quan hóa những gì máy tính đang làm từng bước khi nó thực hiện chương trình đã nói:
Trình chỉnh sửa mã Python:
Có một cách khác để giải quyết giải pháp này? Đóng góp mã của bạn [và nhận xét] thông qua Disqus.
Trước đây: Viết chương trình Python để chuyển đổi một cặp giá trị thành một mảng duy nhất được sắp xếp. Write a Python program to convert a pair of values into a sorted unique array.
Next:
Write a Python program to insert an element before each element of a list.
Python: Lời khuyên trong ngày
Tạo một trình lặp lại lọc các phần tử từ Itable chỉ trả lại chỉ cho các vị từ là sai:
>>> import itertools # keeping only false values >>> list[itertools.filterfalse[bool, [None, False, 1, 0, 10]]] [None, False, 0]
Xem thảo luận
Cải thiện bài viết
Lưu bài viết
Xem thảo luận
Cải thiện bài viết
Lưu bài viết
Đọc
Bàn luận
Using Naive method, this task can be performed by using the loops. One can use two containers one each to store alternate elements and later joining them.
Python3
Các
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
9for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
0for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
1 for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
2 for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
3for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
4for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
5>>> x = [10, 20, 30, 40, 50, 60, 70]
>>> y = [j for i, j in enumerate[x] if i&1]
[20, 40, 60]
1 for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
7for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
8>>> x = [10, 20, 30, 40, 50, 60, 70]
>>> y = [j for i, j in enumerate[x] if i&1]
[20, 40, 60]
1 for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
7x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print[x[::2]]
1 x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print[x[::2]]
2x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print[x[::2]]
3 x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print[x[::2]]
4for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
0x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print[x[::2]]
6>>> x = [10, 20, 30, 40, 50, 60, 70]
>>> y = [j for i, j in enumerate[x] if i&1]
[20, 40, 60]
4x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print[x[::2]]
8x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print[x[::2]]
9[1, 3, 5, 7, 9]0
[1, 3, 5, 7, 9]1
x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print[x[::2]]
2[1, 3, 5, 7, 9]3
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
3[1, 3, 5, 7, 9]5
[1, 3, 5, 7, 9]6
[1, 3, 5, 7, 9]7
[1, 3, 5, 7, 9]0
[1, 3, 5, 7, 9]9
[1, 3, 5, 7, 9]5
[1, 3, 5, 7, 9]6
>>> import itertools # keeping only false values >>> list[itertools.filterfalse[bool, [None, False, 1, 0, 10]]] [None, False, 0]2
>>> import itertools # keeping only false values >>> list[itertools.filterfalse[bool, [None, False, 1, 0, 10]]] [None, False, 0]3
>>> x = [10, 20, 30, 40, 50, 60, 70]
>>> y = [j for i, j in enumerate[x] if i&1]
[20, 40, 60]
1 for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
5for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
2 >>> import itertools # keeping only false values >>> list[itertools.filterfalse[bool, [None, False, 1, 0, 10]]] [None, False, 0]7
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
9for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
03070 for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
2 for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
3The original list : [3, 6, 7, 8, 9, 2, 1, 5] Separated odd and even index list: [3, 7, 9, 1, 6, 8, 2, 5]3
Đầu ra
The original list : [3, 6, 7, 8, 9, 2, 1, 5] Separated odd and even index list: [3, 7, 9, 1, 6, 8, 2, 5]
& nbsp; Phương pháp #2: Sử dụng Danh sách cắt & NBSP; Nhiệm vụ cụ thể này có thể dễ dàng thực hiện bằng phương pháp cắt danh sách theo cách nhỏ gọn và hiệu quả hơn, đây là phương pháp được khuyến nghị để giải quyết vấn đề này.
Method #2 : Using list slicing
This particular task can be easily performed using the list slicing method in a more compact and efficient manner, this is a recommended method to solve this problem.
Python3
Các
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
9for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
0for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
1 for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
2 for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
3for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
4for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
5>>> x = [10, 20, 30, 40, 50, 60, 70]
>>> y = [j for i, j in enumerate[x] if i&1]
[20, 40, 60]
1 for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
7for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
8>>> x = [10, 20, 30, 40, 50, 60, 70]
>>> y = [j for i, j in enumerate[x] if i&1]
[20, 40, 60]
1 for i in range[df.shape[1]]:
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
7Đầu ra
The original list : [3, 6, 7, 8, 9, 2, 1, 5] Separated odd and even index list : [3, 7, 9, 1, 6, 8, 2, 5]