Tôi có một mảng như A = [1,2,3]
và một mảng khác B = [4,5,6]
. Bây giờ, tôi cần một mảng C để các yếu tố trong C nên các yếu tố tương tự của B có xảy ra theo thứ tự của nguyên tố A. Giống như, C = [4, 5, 5, 6, 6, 6]
Cách lấy một số lần cụ thể trong một mã vạch trăn
Trả lời
A = [1,2,3]
B = [4,5,6]
C = [b_item for a_item, b_item in zip(A,B) for _ in range(a_item)]
print C
Kết quả:
[4, 5, 5, 6, 6, 6]
này là một trong những dòng tương đương với:
C = []
for a_item, b_item in zip(A,B):
for _ in range(a_item):
C.append(b_item)
... Đó là tương đương với
C = []
for i in range(min(len(A), len(B))):
a_item = A[i]
b_item = B[i]
for _ in range(a_item):
C.append(b_item)
(N.B. Đừng bị vấp ngã bởi dấu gạch dưới. It's an ordinary variable. Người ta thông thường được sử dụng khi bạn không thực sự phải tham khảo giá trị của biến, như trong ví dụ này)
Giải pháp của tôi:
C = sum([[B[i]]*A[i] for i in range(len(A))], [])
print C
Giải thích:
[B[i]]*A[i]
sẽ tạo ra một danh sách với A[i]
hạng mục công B[i]
[B[i]]*A[i] for i in range(len(A))]
sẽ cung cấp cho bạn một danh sách liệt kê, ví dụ như [[4], [5, 5], [6, 6, 6]]
sum(C, [])
sẽ chuyển đổi danh sách liệt kê vào danh sách
Vâng, công trình này. 'sum (sequence, [])' là một bộ nhớ kém hiệu quả vì nó phải tạo ra nhiều danh sách trung gian, nhưng đó không phải là một vấn đề lớn nếu C là nhỏ. – Kevin
tôi sẽ cung cấp một cách khác để làm việc đó, sử dụng một ý tưởng khác nhau (không tuyên bố ông nên sử dụng điều này, nhưng vì lý do giáo khoa)
tôi thấy khá gọn gàng để được có khả năng tái tạo các yếu tố trong python sử dụng
[0]*3 # it means we create 3 elements of zero: [0,0,0]
nếu tôi chỉ đơn giản là làm điều này:
[[x]*i for i,x in zip(A, B)]
tôi nhận được nhóm yếu tố:
[[4], [5, 5], [6, 6, 6]]
Sau đó, chúng ta có thể sử dụng itertools.chain để có được trở lại với một danh sách duy nhất:
from itertools import chain
list(chain(*[[x]*i for i,x in zip(A, B)]))
[4, 5, 5, 6, 6, 6]
Đây là một giải pháp sử dụng NumPy:
import numpy
a = numpy.array = [1,2,3]
b = numpy.array = [4,5,6]
c = numpy.repeat(b,a)
Kết quả:
array([4, 5, 5, 6, 6, 6])
Đây biết thêm thông tin về việc sử dụng numpy.repeat: http://docs.scipy.org/doc/numpy/reference/generated/numpy.repeat.html
Một cách khác:
C = []
for a, b in zip(A, B):
C.extend([b] * a)
Nhưng tôi muốn danh sách hiểu, chỉ nếu không có sự gây phiền nhiễu _item
, ví dụ:,
C = [b for a, b in zip(A, B) for _ in range(a)]
Hoặc ngắn hơn (nhưng đối với trường hợp lớn chậm) tổng:
C = sum(([b] * a for a, b in zip(A, B)), [])
- 1. ZPL - mã vạch Thiếu một chữ số khi in
- 2. Cách lấy một dòng cụ thể từ một tệp
- 3. Cách tạo mã vạch từ một chuỗi trong swift
- 4. Làm cách nào để lấy số điểm mã cho một ký tự cụ thể trong chuỗi utf-8?
- 5. Lấy số lần một mục được lặp lại trong C#
- 6. Số lần một ký tự cụ thể xuất hiện trong một chuỗi
- 7. cách require_once trong mã vạch
- 8. Liên kết đến một mã số cụ thể
- 9. Cách lấy số sửa đổi SVN cụ thể trong TeamCity
- 10. Làm xáo trộn mã vạch trăn thông qua đột biến thông dịch
- 11. Có thể hiển thị số dưới mã vạch một chiều do ZXing tạo ra không?
- 12. Cách lấy mã cam kết cụ thể từ bitbucket-git
- 13. bó trăn "back-end" mã trong một ứng dụng PhoneGap
- 14. Cố gắng lấy một số trong một mảng gấp hai lần số trung bình
- 15. Cách lấy dòng mã cụ thể đã phát hiện lỗi
- 16. Cách lấy Telegram chat_id cho một người dùng cụ thể?
- 17. Làm cách nào để chuyển đổi một phần của một bộ mã vạch python (mảng byte) thành một số nguyên
- 18. Cách lấy Giá trị cột cụ thể từ một DataTable?
- 19. Cách tìm mã khóa cho một khóa cụ thể
- 20. Lấy số từ một chuỗi sau ký tự cụ thể và chuyển đổi số đó
- 21. Đọc các tệp theo một thứ tự cụ thể trong trăn
- 22. Số hàng mã vạch của WPF
- 23. Cách lấy tên miền của một cookie cụ thể?
- 24. cách lấy giá trị của hộp nhập biểu mẫu trong mã vạch
- 25. GUI mã vạch hoặc sử dụng công cụ gui-designer
- 26. Lấy số dòng cho varchar cụ thể trong MS SQL
- 27. Làm cách nào để thực thi mã một lần và chỉ một lần trong Swift?
- 28. Lấy các số cụ thể từ chuỗi
- 29. Lucene: cách tăng cường một số trường cụ thể
- 30. Cách lấy màu của đường được vẽ gần đây nhất trong mã vạch của Python
Ông có thể giải thích điều này cho .. người nghiêng ít pythonic như tôi? Tôi đã suy nghĩ 2 cho vòng lol –
@ SterlingArcher, chắc chắn. Theo một cách nào đó, tôi _am_ sử dụng hai cho vòng lặp. Tôi chỉ nhét cả hai người vào một biểu hiện. – Kevin
Cảm ơn. Nhưng như Sterling Archer đã nói .... có logic đơn giản nào để làm điều này không? Mặc dù, điều này hoạt động. – sparrow